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

时间:2017-12-04 09:21:49

标签: java hibernate jpa hibernate-mapping

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

表格:

  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;
    }
    
  4. 我正在使用hpanate和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
    

1 个答案:

答案 0 :(得分:0)

为了获得您想要的架构:

Observable.of

我省略了 // 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; //... } ,因此hibernate会将它映射到实体主键。

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