取消现有注释并使用@Lob注释列表 – 此specifies that a persistent property or field should be persisted as a large object to a database-supported large object type.
如果变量的类型是Serializable的子类型,则可以完全省略注释; JPA关于默认映射的规则声明可序列化且非原始或Embeddable的类型被序列化并存储在BLOB列中.但是,List不是Serializable,即使ArrayList是.
您可以将@Lob与@ElementCollection一起使用,但我不确定结果是什么;我不知道是否序列化了整个列表,或者创建了一个表,其中每个列表元素都是单独序列化的.无论哪种方式,你都可能不感兴趣.
多次编辑:当然,作为规范的勤奋学生,这个注释只适用于Serializable类型的字段,而不仅仅适用于容纳Serializable类对象的字段.因此,为了完成这项工作,你将不得不参与恶作剧.我看看你是否能用一个以交叉类型为界的通用通配符来做一些聪明的事情,但我认为你不能.但是,您可以像这样编写一个小类:
class SerializableInstanceOf implements Serializable {
public final T instance;
public SerializableInstanceOf(T instance) {
Serializable s = (Serializable)instance;
this.instance = instance;
}
}
并使用它作为列表的持有者 – 实体具有标记为@Lob的此类型的字段,并保留对其中列表的引用.每次要使用列表时,都可以通过实例字段,可能通过实体上的getList方法.
这很难看,但它应该让你做你需要做的事情.