使用JPA/Hibernate注释映射字符串列表

dan*_*anb 21 java annotations hibernate jpa

我想做这样的事情:

    @Entity public class Bar {
        @Id @GeneratedValue long id;
        List<String> Foos
    }
Run Code Online (Sandbox Code Playgroud)

并将Foos坚持在这样的表格中:

foo_bars (
    bar_id int, 
    foo varchar(64)
);
Run Code Online (Sandbox Code Playgroud)

更新:

我知道如何映射其他实体,但在许多情况下它是过度的.如果没有创建另一个实体或最终在某些blob列中的所有内容,看起来我建议的是不可能的.

小智 28

如果您使用的是JPA2,请按以下步骤操作:

@Entity public class Bar {
   @Id @GeneratedValue long id;

   @ElementCollection
   @CollectionTable(name="foo_bars", joinColumns=@JoinColumn(name="bar_id"))
   @Column(name="foo")
   List<String> Foos;
 }
Run Code Online (Sandbox Code Playgroud)

有关更清晰的示例,请参阅"Hibernate注释参考指南"第2.2.5.3.3节.


Maa*_*els 27

这在Hibernate术语中是"值集合"或"元素".它有一个(特定于Hibernate)注释.JPA不支持(尚未).

简而言之,像这样注释你的收藏:

@CollectionOfElements
@JoinTable(
        table=@Table(name="..."),
        joinColumns = @JoinColumn(name="...") // References parent
)
@Column(name="...value...", nullable=false)
Run Code Online (Sandbox Code Playgroud)

这将创建具有外键和限制的必要表.

  • 从JPA 2开始,您可以使用ElementCollection注释(这基本上是CollectionOfElements的标准化版本)进行移植,并且允许您拥有Embeddables或基本类型的集合,其中包括字符串:http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection (28认同)