java - 如何注册处理 real[] 和 text[] 数组列类型的自定义 Hibernate ARRAY 类型
问题描述
我将Hibernate Types库用于自定义 Hibernate 类型。
我有两个CustomArrayType
处理real[]
和text[]
数组类型。
我可以CustomStringArrayType
在 Hibernate Dialect 中注册一个(例如PostgreSQL94Dialect
),但是如何注册两种类型?
以下是我的自定义方言,没有它我会收到方言未找到 2003 错误:
public class HibernateCustomDialect extends org.hibernate.dialect.PostgreSQL94Dialect {
private static final Logger log = LoggerFactory.getLogger(HibernateCustomDialect.class);
public HibernateCustomDialect() {
super();
log.info("Registering Custom Hibernate Dialect - {}", HibernateCustomDialect.class.getName());
this.registerHibernateType(Types.ARRAY, CustomStringArrayType.class.getName());
}
}
解决方案
CustomStringArrayType
不是来自Hibernate Types项目。您可以做的是使用ListArrayType
,它更通用,应该同时处理这两种情况real[]
,text[]
同时允许您List
在 Java 端使用 a :
@Entity(name = "Event")
@Table(name = "event")
@TypeDef(
name = "list-array",
typeClass = ListArrayType.class
)
public class Event {
@Id
private Long id;
@Type(type = "list-array")
@Column(
name = "sensor_ids",
columnDefinition = "uuid[]"
)
private List<UUID> sensorIds;
@Type(type = "list-array")
@Column(
name = "sensor_names",
columnDefinition = "text[]"
)
private List<String> sensorNames;
@Type(type = "list-array")
@Column(
name = "sensor_values",
columnDefinition = "integer[]"
)
private List<Integer> sensorValues;
@Type(type = "list-array")
@Column(
name = "sensor_long_values",
columnDefinition = "bigint[]"
)
private List<Long> sensorLongValues;
@Type(
type = "com.vladmihalcea.hibernate.type.array.ListArrayType",
parameters = {
@Parameter(
name = ListArrayType.SQL_ARRAY_TYPE,
value = "sensor_state"
)
}
)
@Column(
name = "sensor_states",
columnDefinition = "sensor_state[]"
)
private List<SensorState> sensorStates;
@Type(type = "list-array")
@Column(
name = "date_values",
columnDefinition = "date[]"
)
private List<Date> dateValues;
@Type(type = "list-array")
@Column(
name = "timestamp_values",
columnDefinition = "timestamp[]"
)
private List<Date> timestampValues;
//Getters and setters omitted for brevity
}
推荐阅读
- javascript - 在Angular 8中将所有图像转换为base64
- sql - 总和不选择零值
- ios - print() 语句未在 Android Studio 中的颤动 iOS 应用程序中打印到控制台
- postgresql - 查找重复项可以,但为什么删除不起作用?
- javascript - 如何使用 Turn.js 将 filp 效果添加到 epub 页面?
- solr - 使用 gremlin cli 连接到 apache atlas + hbase + solr setup
- mysql - 通过使用 django ORM 查询获取模型对象的所有相关细节?
- php - 非常高级的mysql搜索
- c# - Moq 插入/更新新对象初始化
- html - 无法在固定位置 div 下方使用滚动条