hibernate-使用联接表获取值,其中联接表中使用的键不是primery键
我有三个A、B、C班,在哪hibernate-使用联接表获取值,其中联接表中使用的键不是primery键,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我有三个A、B、C班,在哪 public class A{ @Id @Column(name = "id", insertable = false, updatable = false) private String id; @Column(name = "bid", insertable = false, updatable = false) String b_id } public class B{ @id @Column(name = "id", insertable =
public class A{
@Id
@Column(name = "id", insertable = false, updatable = false)
private String id;
@Column(name = "bid", insertable = false, updatable = false)
String b_id
}
public class B{
@id
@Column(name = "id", insertable = false, updatable = false)
private String id;
@Column(name = "cid", insertable = false, updatable = false)
String c_id;
}
public class C{
@Id
@Column(name = "id", insertable = false, updatable = false)
private String id;
@Column(name = "property", insertable = false, updatable = false)
private String property
}
我想从Hibernate pojoc.property
我注意到我不能通过使用@JoinTable
实现它,因为B主键不是a&c键的组合
我想做下一个:
@loader
。这似乎不是一个好主意,我希望在每个选择上都创建namedQuery表
@Entity
@Table(name = "A&B&C")
@Loader(namedQuery = "all")
@NamedNativeQuery(name = "all", query = "select * from A a join B b on a.bid = a.aid join C c on b.cid = c.id )
10x.您不应该将其他实体的ID作为实体的字段。看起来你只需要在a和B之间有一个多音(多个表示相同的B),在B和C之间有一个多音(多个B表示相同的C) 因此,您应该在A中,而不是
b\u id
:
@ManyToOne
@JoinColumn(name = "bid")
private B b;
同样,在B中:
@ManyToOne
@JoinColumn(name = "cid")
private C c;
现在,当你想得到A的属性时,你只需要调用
String property = a.getB().getC().getProperty();
我不能改变B和C