我有2个表可以在其主键字段上加入OneToOne关系。
其中一个表(所有者)在其主键字段上具有自动生成功能。 另一张表(T2)没有。
我希望使用JPA从它所在的Owner表实例获取PK字段值,并将该值分配给T2的PK字段。这样,当我坚持所有者的实例时,所以应该是T2实例。
这是怎么做到的?
我尝试过任何激发思想的东西。
所有者类:
public class Owner implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
Banames t2inst;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(nullable = false)
public Integer getId() { return id; }
@OneToOne(cascade=CascadeType.ALL)
public T2 getT2() { return t2inst; }
//...
}
逆类:
public class T2 implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id; // some other fields here
@Id
@Basic(optional = false)
@Column(nullable = false)
public Integer getId() { return id; }
// ...
}
插入代码:
Owner owner = new Owner();
T2 t2 = new T2();
owner.setT2(t2);
// t2.setId(owner.getId());
em.persist(owner);
em.getTransaction().commit();
错误消息:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'id' cannot be null
Error Code: 1048
Call: INSERT INTO T2 (ID, NAME) VALUES (?, ?)
bind => [2 parameters bound]
Query: InsertObjectQuery(hibernate.T2[ id=null ])
双向关系(也从T2到所有者),并且使用@PrimaryKeyJoinColumn也没有工作。