两个相同实体之间的Hibernate关系

时间:2018-03-28 10:25:14

标签: java sql hibernate

我有一个具有唯一ID和名称的A类。
我想创建一个单独的表,它将包含两个A实体和它们之间的关系,这些实体将在创建时添加。
因此新表的列应如下所示:

第一个对象A(ID)|第二个对象A(ID)|关系


其中第一表ID和第二表ID是另外两个对象的ID,但在同一实体内。
你们能不能给我一些如何在hibernate实体中创建它的技巧?以及正确的sql脚本。

1 个答案:

答案 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)