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

2022-09-02 00:19:55

我想做这样的事情:

    @Entity public class Bar {
        @Id @GeneratedValue long id;
        List<String> Foos
    }

并让 Foos 保留在这样的表中:

foo_bars (
    bar_id int, 
    foo varchar(64)
);

更新:

我知道如何映射其他实体,但在许多情况下,这有点过分。看起来,如果不创建另一个实体或最终在某个 blob 列中包含所有内容,则无法实现我所建议的操作。


答案 1

如果您使用的是 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;
 }

有关更清晰的示例,请参阅《休眠注释参考指南》中的第 2.2.5.3.3 节。


答案 2

这在Hibernate术语中是“值的集合”或“元素”。它有一个(特定于休眠的)注释。JPA(目前)不支持此功能。

简而言之,像这样注释您的集合:

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

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


推荐