Hibernate对一些基本类型的映射提供了很好的支持,但有时候我们需要映射自定义或更复杂的数据类型,比如一个List集合,可以通过基本类型映射实现,需要在数据库中新建一张表,这种方式增加了数据库开销;也可以将List集合中的数据拼接成字符串再存储,这种方式导致程序可读性不友好,同时增加代码的复杂度;Hibernate提供了DiscriminatorType
和UserType
接口,方便用户自定义需要映射的数据类型。这里以UserType为例实现。
假设用户需要自定义一个类型,名称为ctype
,它是16位字符的char
数组,需要映射到数据库VARCHAR
类型。
首先自定义 java 类型ctype
:
public class ctype implements Serializable {
// mtype 的长度
private static int TYPE_LENGTH = 16;
// mtype 实际上就是 char 数组
private char[] mtype = new char[TYPE_LENGTH];
// 默认构造函数
public ctype() {
this.mtype = new char[0];
}
// 通过构造函数转换为ctype类型
public ctype(Object object) {
String str = String.valueOf(object);
if (StrUtil.isBlank(str))
this.mtype = new char[0];
this.mtype = str.toCharArray();
}
public boolean isEmpty() {