我想知道两个表之间是否可以有一对多的jpa 2.x关系。我期待这样的事情: (我搜索了很多与谷歌,找出没有成功类似的情景)JPA 2.x单向一对多关系
CUSTOMER
ID NAME RELATEDCOLORS
1 John 10
2 Albert 20
3 Maria 10
4 Smith null
COLORS
ID FATHERID COLOR
1 10 Red
2 10 Green
3 10 Blu
4 20 Cyan
正如你可以看到每个人都有相应的颜色。所以,约翰和玛丽亚的颜色都是红色,绿色和蓝色。对于艾伯特来说,颜色是青色,而史密斯则没有颜色。
我已经试过这样的事情:
客户实体
....
@Id
@Column(name = "ID", nullable = false)
private long iId;
@Column(name = "NAME")
private String iName;
@Column(name = "RELATEDCOLORS", nullable = true)
private Long iRelatedColors;
@JoinColumn(name = "FATHERID",referencedColumnName="RELATEDCOLORS", nullable=true)
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Colors> iColors;
....
请注意,我用了“龙iRelatedColors”,而不是“长iRelatedColors”因为iRelatedColors属性可以为空
颜色实体
....
@Id
@Column(name = "ID", nullable = false)
private long iId;
@Column(name = "FATHERID", nullable = false)
private long iFatherId;
@Column(name = "COLOR")
private String iColor;
....
我不会l IKE有型客户的属性在颜色实体
我需要的是:
当读取一个客户,那么列表的iColor必须当调用相应get填充...方法
当我在更改iColors列表(例如:添加新颜色或删除颜色)后更新客户 时,颜色实体也必须更新。
而且我所有我需要的只有:
- Customer表
的RELATEDCOLORS列使用一个唯一的编号填写(例如:10,20,30,40 ECC)
在Customer表中,RELATEDCOLORS列必须始终不为空,如果Colors表中存在相应的ID,则该列不会为空。 如果其中一个CUSTOMER行在RELATEDCOLORS列中有一个空值,那么在运行期间会有一个由Hibernate抛出的NullPointerException异常。
使用我显示给你的数据不起作用,我不明白为什么。
在此先感谢您的帮助。
你一对多的映射将明显增加FK到颜色,所以如果你不这样做像它然后删除该映射,并把OneToOne/ManyToOne和FK将在客户。 –
客户>颜色的关系显然是@ManyToOne,所以我不确定你为什么要将它映射为@OneToMany? –
大家好,谢谢你的回答。尼尔,请问你能更具体些吗? Alan,从表格数据中可以看出,客户>颜色之间的关系是OneToMany。例如Jhon的颜色为红色,绿色和蓝色 谢谢 – gpezzini