如何通过JPA持久化java.util.Set?

Yat*_*oel 4 java jpa set

我有一个字段aliases类型java.util.Set于一体Entity.这Set并不表示与实体的任何关系.

  1. 如何aliases通过JPA 存储此字段?

  2. 该字段如何存储在数据库中?我认为对于数据库来说,这个字段是一个多值属性.

Pas*_*ent 7

如何通过JPA存储此别名字段?

JPA 1.0不支持基本类型的集合,因此您必须:

  1. 引入一个实体并将其映射为@OneToMany〜或〜
  2. 获取Set存储在BLOB(作为Serializable)〜或〜
  3. 标记它@Transient并使用另一个getter/setter来使用自定义字符串表示(使用分隔符)〜或〜来存储它
  4. 使用支持基本类型集合的JPA提供程序的扩展(例如,Hibernate具有@CollectionOfElements注释).

解决方案#1将是最干净的便携式解决方案.解决方案#2可能会导致一些升级问题.解决方案#3是#2的丑陋变通方法.解决方案#4干净但不便携.

在JPA 2.0中,有@ElementCollection这个用例的注释(这当然是理想的解决方案).

该字段如何存储在数据库中

根据所选的实现,它可能位于另一个表中的BLOB,VARCHAR中.