我有一个关于如何Hibernate保存字符串(或对象)的arraylist的问题。 I read here,所以他们说Hibernate会尝试调用arraylist的toString方法来持久化它。
我为测试编写了一个小代码,但它的工作方式并不像他们所说的那样。
class CustomizeArrayList extends ArrayList<String>
private static final long serialVersionUID = 1L;
@Override
public String toString() {
// TODO Auto-generated method stub
System.out.println("To String of customize arraylist");
return super.toString();
}
}
我正在使用这种类型:
@Column("array")
private CustomizrArrayList array
它不是调用toString方法,是使用反射来持久化还是序列化而不是其他什么?
提前致谢!
答案 0 :(得分:0)
Hibernate知道许多内部Java类型以及如何转换它们。 List
类型就是其中之一。对于所有列表类型(链接的,基于数组的或自定义的),Hibernate将使用相同的基于列表的方法,该方法基本上尝试将列表的所有元素放入另一个表中。
你不想那样。实现所需目标的一种方法是使用String[]
(即基本数组类型而不是集合)而不是自定义类型,但这会在其他地方产生新问题。
正确的解决方案是告诉Hibernate您需要对此类型进行特殊处理。实现接口UserType
(docs)。在方法nullSafeGet()
和nullSafeSet()
中,您可以在数据库列(VARCHAR
,我猜)和您的CustomizeArrayList
之间进行转换。