簡體   English   中英

休眠的父子級未在表中保存外鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM