我有三个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 = 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
}
我想在一个选择来自A Hibernate pojo c.property
我注意到我无法使用@JoinTable
来实现它,因为B主键不是&的组合。 c键。
我考虑过做下一个:
将@loader
与namedQuery一起使用。这似乎是一个坏主意,我想在每个选择表将创建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 )
使用@SecondaryTables有可能吗? 3?
还有其他好的解决方案吗?
10倍。
答案 0 :(得分:0)
您不应将其他实体的ID作为实体的字段。看起来你应该简单地在A和B之间有一个ManyToOne(几个As表示相同的B),以及B和C之间的ManyToOne(几个B指的是相同的C)。
所以你应该在A中代替b_id
:
@ManyToOne
@JoinColumn(name = "bid")
private B b;
同样地,在B:
@ManyToOne
@JoinColumn(name = "cid")
private C c;
现在,当你想要获得A的属性时,你只需要调用
String property = a.getB().getC().getProperty();