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

时间:2010-04-17 06:51:39

标签: java jpa set

我在一个aliases中有java.util.Set类型的字段Entity。此Set不表示与实体的任何关系。

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

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

1 个答案:

答案 0 :(得分:7)

  

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

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

  1. 介绍一个实体并将其映射为@OneToMany〜或〜
  2. 将您的Set存储在BLOB中(作为Serializable)〜或〜
  3. 标记@Transient并使用另一个getter / setter来使用自定义字符串表示(使用分隔符)来存储它〜或〜
  4. 使用支持基本类型集合的JPA提供程序的扩展(例如,Hibernate具有@CollectionOfElements注释)。
  5. 解决方案#1将是最干净的便携式解决方案。解决方案#2可能会导致一些升级问题。解决方案#3是#2的丑陋变通方法。解决方案#4干净但不便携。

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

      

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

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