[英]Hibernate parent-child not saving foreign-key in table
我有兩個具有父子關系的實體-人和地址。
他們有一對一的關系。
我能夠通過一次保存來級聯保存它們兩個。
但是下面的代碼並未將Foreign_key address_id添加到Person表。
SQL:
create table PERSON (
id number(20) NOT NULL ,
PRIMARY KEY (id)
);
alter table Person add address_id number(20);
alter table Person add CONSTRAINT FK_Address FOREIGN KEY (address_id) REFERENCES address (id);
create table Address (
id number(20) NOT NULL ,
PRIMARY KEY (id)
);
休眠代碼:
@Entity
@Table(name="Person")
@javax.persistence.SequenceGenerator(name="SOME_SEQ", sequenceName="pk_sequence")
public class Person
{
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SOME_SEQ")
private int id;
@OneToOne
@PrimaryKeyJoinColumn
@Fetch(FetchMode.JOIN)
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
private Address address;
}
@Entity
@javax.persistence.SequenceGenerator(name="SOME_SEQ", sequenceName="pk_sequence")
public class Address
{
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SOME_SEQ")
private int id;
@Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE})
@OneToOne(mappedBy="address")
@Fetch(FetchMode.JOIN)
private Person person;
}
駕駛代碼:
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Person p = new Person();
Address add = new Address ();
p.setAddress(add);
add.setPerson(p);
id = (Integer) session.save(p);
tx.commit();
您的映射錯誤。 您在“人”中有一列是地址表的外鍵。 但是,您將關聯映射到@PrimaryKeyJoinColumn
,這意味着:該實體的ID也是地址表的外鍵。 使用@JoinColumn
。 不是@PrimaryKeyJoinColumn
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.