2012-08-22 21 views
2

我在我的數據庫中有三個表:休眠尋找父字段名稱上加入到子表

create table A (
    a_id int primary key 
); 

create table B (
    b_id int primary key references A(a_id) 
); 

create table C (
    c_id int primary key, 
    b_id int references B(b_id) 
); 

,我用下面的JPA註解類建模他們:

@Entity(name = "A") 
@Table(name = "A") 
public class A { 
    @SuppressWarnings("unused") 
    @Id 
    @Column(name = "A_ID") 
    private int id; 
} 

@Entity(name = "B") 
@Table(name = "B") 
@PrimaryKeyJoinColumns({@PrimaryKeyJoinColumn(name = "B_ID", referencedColumnName = "A_ID")}) 
public class B extends A { 
} 

@Entity(name = "C") 
@Table(name = "C") 
public class C { 
    @SuppressWarnings("unused") 
    @Id 
    @Column(name = "C_ID") 
    private int id; 

    @SuppressWarnings("unused") 
    @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH}) 
    @JoinColumns(value = { 
     @JoinColumn(name = "B_ID", referencedColumnName = "B_ID", insertable = false, updatable = false)}) 
    private B b; 
} 

當我嘗試使用這些類與Hibernate實體管理器,它抱怨與以下錯誤:

Unable to find column with logical name: B_ID in org.hibernate.mapping.Table(A) and its related supertables and secondary tables

更改referencedColumnName在C到B加入到A_ID似乎使它感到高興。這是爲什麼?我不能模擬數據庫中的關係嗎?

回答

1

少了什麼是繼承策略的規範:

@Entity(name = "A") 
@Table(name = "A") 
@Inheritance(strategy = InheritanceType.JOINED) 
public class A { 
    @SuppressWarnings("unused") 
    @Id 
    @Column(name = "A_ID") 
    private int id; 
} 

JPA的默認值是SINGLE_TABLE,其中倒塌整個類層次結構到一個表。