插入期间的JPA键值赋值

时间:2014-03-19 07:28:46

标签: jpa persistence cascade one-to-one

我有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也没有工作。

0 个答案:

没有答案