Java 休眠父级-子级不在表中保存外键
我有两个有亲子关系的实体-人和地址 他们有一对一的关系 我可以通过一次保存来级联保存它们 但是下面的代码没有将外键地址id添加到Person表中 SQL: 休眠代码: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
@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();