我希望以单向方式与连接表建立一对一的关联。 -
表格:
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;
}
我正在使用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
答案 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
列将成为主键。