2012-08-22 22 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,其中倒塌整个类层次结构到一个表。