Hibernate 一对多关系
考虑下面提到的两个表-Hibernate 一对多关系,hibernate,jpa,Hibernate,Jpa,考虑下面提到的两个表- 表1(标识栏、名称栏) 表2(uid列、代码列1、代码列2) 其中, id\u col是表1的主键 uid\u col是表2的主键 并且,id_col与code_col_1和code_col_2都有一对多关系 记录可能看起来像:- 表1 1,xxx 2,yyy 表2 11,1,2 12,2,1 12,2,2 在以下课程中,JPA会是什么样子? @Entity @Table(name = "Table1") public class T1 { @OneTo
表1(标识栏、名称栏)
表2(uid列、代码列1、代码列2)
其中,
id\u col是表1的主键
uid\u col是表2的主键
并且,id_col与code_col_1和code_col_2都有一对多关系
记录可能看起来像:-
表1
1,xxx
2,yyy
表2
11,1,2
12,2,1
12,2,2
在以下课程中,JPA会是什么样子?
@Entity
@Table(name = "Table1")
public class T1 {
@OneToMany(targetEntity=T2.class, mappedBy="??????", cascade=CascadeType.ALL)
private List<T2> t2; //???not sure about this
}
@Entity
@Table(name = "Table2")
public class T2 {
@ManyToOne
@JoinColumn(name="code_col_1")
private T1 t1; //???not sure what goes here
}
@实体
@表(name=“表1”)
公共类T1{
@OneToMany(targetEntity=T2.class,mappedBy=“???????”,cascade=CascadeType.ALL)
私人列表t2;/??对此不确定
}
@实体
@表(name=“表2”)
公共课T2{
@许多酮
@JoinColumn(name=“code\u col\u 1”)
私人T1;/??不确定这里是什么
}
这不是一对多的关联;相反,它是从T2
到T1
的两个独立的多对一关联。您可以在T2
侧映射这两个:
@Entity
@Table(name = "Table2")
public class T2 {
@Id // map whatever generator you'd like
private long id;
@ManyToOne
@JoinColumn(name="code_col_1")
private T1 t1_code1;
@ManyToOne
@JoinColumn(name="code_col_2")
private T1 t1_code2;
}
将反向的一对多关联从
T1
映射到T2
不是一个好主意,因为两个集合中存在(某些)相同元素的风险,这将在插入/删除过程中导致各种问题。表1的主键是什么?表2的主键是什么?“在一列中记录”是什么意思?编辑了这个问题…希望它现在更清晰谢谢你的帮助!但我仍然感到困惑,由于多对一关联正在发挥作用,表2是否可能为code_col_1或code_col_2保留空值,比如(13,null,null)?@Mohammad-是的,默认情况下@manytone关联在所有者端可以为空。如果您希望不允许空值,可以通过optional
属性:`@ManyToOne(optional=false)来实现