Java 休眠父级-子级不在表中保存外键

Java 休眠父级-子级不在表中保存外键,java,hibernate,Java,Hibernate,我有两个有亲子关系的实体-人和地址 他们有一对一的关系 我可以通过一次保存来级联保存它们 但是下面的代码没有将外键地址id添加到Person表中 SQL: 休眠代码: @Entity @Table(name="Person") @javax.persistence.SequenceGenerator(name="SOME_SEQ", sequenceName="pk_sequence") public class Person { @Id @GeneratedValue(strategy

我有两个有亲子关系的实体-人和地址

他们有一对一的关系

我可以通过一次保存来级联保存它们

但是下面的代码没有将外键地址id添加到Person表中

SQL:

休眠代码:

@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();

您的映射错误。您有一列是地址表的外键。但是将关联映射到,这意味着:此实体的ID也是地址表的外键。使用
@JoinColumn
。Not
@PrimaryKeyJoinColumn
您的映射错误。您有一列是地址表的外键。但是将关联映射到,这意味着:此实体的ID也是地址表的外键。使用
@JoinColumn
。Not
@PrimaryKeyJoinColumn
您的映射错误。您有一列是地址表的外键。但是将关联映射到,这意味着:此实体的ID也是地址表的外键。使用
@JoinColumn
。Not
@PrimaryKeyJoinColumn
您的映射错误。您有一列是地址表的外键。但是将关联映射到,这意味着:此实体的ID也是地址表的外键。使用
@JoinColumn
。不是
@PrimaryKeyJoinColumn

看起来您试图在地址表存在之前创建fk。sql从何而来?sql是由我创建的,用于创建put/GET所需的表。看起来您正试图在地址表存在之前创建fk。sql从何而来?sql是由我创建的,用于创建put/GET所需的表。看起来您正试图在地址表存在之前创建fk。sql从何而来?sql是由我创建的,用于创建put/GET所需的表。看起来您正试图在地址表存在之前创建fk。sql从何而来?我创建sql是为了创建put/get所需的表
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();