gpt4 book ai didi

java - JPA - 多对多作为 ElementCollection

转载 作者:行者123 更新时间:2023-12-04 17:29:04 26 4
gpt4 key购买 nike

我有一个多对多关系,它为项目分配标签(除了字符串之外什么都没有):

+------+   +------------+   +-------+
| ITEM | | ITEM_LABEL | | LABEL |
|------| |------------| |-------|
| ID |<->| ITEM_ID | ┌>| ID |
|------| |------------| | |-------|
| .... | | LABEL_ID |<┘ | TEXT |
+------+ +------------+ +-------+

...我想避免为标签表创建 POJO 类,并将其作为字符串集合保存在 Item 类中。有没有办法使用 JPA( hibernate )注释来做到这一点?

我试过将@CollectionTable 与@JoinTable 结合使用,但显然行不通:

@Entity
public class Item {

@Id
private long id;

@ElementCollection
@JoinTable(name = "ITEM_LABEL", joinColumns = @JoinColumn(name = "ITEM_ID"))
@CollectionTable(name = "LABEL", joinColumns = @JoinColumn(name = "ID", referencedColumnName = "LABEL_ID"))
@Column(name = "TEXT")
private Collection<Strings> labels;
}

谁能告诉我如何将标签作为字符串集合包含在项目类中?非常感谢!

最佳答案

@JoinTable 用于将以下关联映射到数据库表:双向多对一/一对多、单向多对一和一对一(两者双向和单向)关联。

如果你真的想让 Label 有自己的表,你必须将它定义为一个 Entity,然后使用 ManyToMany 关系。

另一种解决方案是删除 Label 表并将标签名称保留为 LABEL 而不是 item_label 表中的 label_id。

所以你们的关系会变成

@ElementCollection
@CollectionTable(name = "ITEM_LABEL", joinColumns = @JoinColumn(name = "ITEM_ID"))
@Column(name = "LABEL")

关于java - JPA - 多对多作为 ElementCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61337372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com