我有一个具有唯一ID和名称的A类。
我想创建一个单独的表,它将包含两个A实体和它们之间的关系,这些实体将在创建时添加。
因此新表的列应如下所示:
第一个对象A(ID)|第二个对象A(ID)|关系
其中第一表ID和第二表ID是另外两个对象的ID,但在同一实体内。
你们能不能给我一些如何在hibernate实体中创建它的技巧?以及正确的sql脚本。
答案 0 :(得分:0)
Machiej我不确定你想要什么样的关系 一对一或一对多
np,您可以使用 @JoinTable
来实现它以下是带有连接表的A到A的一对多关系的示例;
@Entity
public class A {
@Id
@GeneratedValue
private Long id;
@OneToMany
@JoinTable(name = "a_join_a", joinColumns = @JoinColumn(name = "parent_a")
,inverseJoinColumns = @JoinColumn(name = "child_a"))
private List<A> aList = new ArrayList<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<A> getaList() {
return aList;
}
public void setaList(List<A> aList) {
this.aList = aList;
}
}
以下是一对一关系的示例b / w A到A与连接表(注意:这不是一个一对一使用连接表的好主意);
@Entity
public class A {
@Id
@GeneratedValue
private Long id;
@OneToOne
@JoinTable(name = "a_join_a", joinColumns = @JoinColumn(name = "parent_a")
,inverseJoinColumns = @JoinColumn(name = "child_a"))
private A childA;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public A getChildA() {
return childA;
}
public void setChildA(A childA) {
this.childA = childA;
}
}
输出表对于两个场景都是相同的,因为您需要连接表:
mysql> desc A;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | bigint(20) | NO | PRI | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)
mysql> desc a_join_a;
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| child_a | bigint(20) | YES | MUL | NULL | |
| parent_a | bigint(20) | NO | PRI | NULL | |
+----------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)