データベースに3つのテーブルがあります。
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
すると、それが幸せになるようです。何故ですか?データベースにあるように関係をモデル化することはできませんか?