gpt4 book ai didi

java - 如何在 hibernate 中使用外键和连接表以及单向进行一对一关联

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:45 25 4
gpt4 key购买 nike

我希望以单向方式与连接表建立一对一的关联。 -

表格:

  1. A(A_id、D_id、A_Data)
  2. B (A_id, C_id)//连接表只包含 A 和 C 之间的关系
  3. C(C_id、C_Data)

    Class A {
    .
    .
    @OneToOne(cascade = CascadeType.ALL)
    @JoinTable(name = "B",
    joinColumns = @JoinColumn(name = "A_id", referencedColumnName = "A_id"),
    inverseJoinColumns = @JoinColumn(name = "C_id", referencedColumnName = "C_id"))
    private C c;
    }

我正在使用 hibernate 和 jpa 2.0。实体 D 在模型中并不重要,因此被忽略。我只想读取数据,因此不应关注插入/更新/删除用例,但也可以建议这种情况下的最佳实践。

此设置不起作用。有人可以建议如何以正确的方式做到这一点吗?

它给出了以下异常

org.hibernate.MappingException: Unable to find column with logical name: A_id in org.hibernate.mapping.Table(A) and its related supertables and secondary tables

最佳答案

为了获得您想要的架构:

    // Given the following C entity
@Entity
public class C {

@Id
@Column(name = "C_ID")
private long id;

private String C_Data;

//...
}


// A Entity should be
@Entity
public class A {

@Id
@Column(name = "A_ID")
private long id;

private String A_Data;

@OneToOne(cascade = CascadeType.ALL )
@JoinTable(name = "B", joinColumns = @JoinColumn(name = "A_id"), inverseJoinColumns = @JoinColumn(name = "C_id", unique = true))
private C c;

//...

}

我省略了referencedColumnName,因此hibernate会将其映射到实体主键。

另请注意,B 表的 A_id 列将成为主键。

关于java - 如何在 hibernate 中使用外键和连接表以及单向进行一对一关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47630019/

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