hibernate-使用联接表获取值,其中联接表中使用的键不是primery键

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 =

我有三个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
 }
我想从Hibernate pojo
c.property

我注意到我不能通过使用
@JoinTable
实现它,因为B主键不是a&c键的组合

我想做下一个:

  • 使用名为query的
    @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 )
    
  • 使用@SecondaryTables有可能吗?三个人

  • 还有别的好办法吗


    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