JPA注释问题

时间:2011-08-03 16:00:12

标签: java jpa annotations

我有表A,表AB,表B,表AB具有表A和表B的外键引用。表A和表AB之间存在一对一关系。表B和表B之间存在多对一关系。表AB。

我的问题是,如果我正在为表B保存域,它将表AB中的数据保存但不在A中。如果这是预期的行为,请告诉我或者我可以通过调用save保存所有其他表中的所有数据在对象B上

Class A
{
    @OneToOne(mappedBy="abpk.a")
    @Cascade({ org.hibernate.annotations.CascadeType.ALL,
               org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
    private AB ab;
}

@Entity
@AssociationOverrides({
@AssociationOverride(name = "abpk.a", joinColumns = @JoinColumn(name = "colA", referencedColumnName = "colA")),
@AssociationOverride(name = "abpk.b", joinColumns = @JoinColumn(name = "Colb", referencedColumnName = "colB")) })
Class AB
{
    ABPK abpk = new ABPK();
    A a;
    B b;

    //inner class
    class ABPK
    {
       A a;
       B b;

       @OneToOne(fetch = FetchType.LAZY)
       @Cascade({ org.hibernate.annotations.CascadeType.ALL, 
                  org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
       @JoinColumn(name="b")
       //Getter for A
       GetA();

       @ManyToOne(fetch = FetchType.LAZY)
       //Getter for B
       GetB();
     }
}

Class B
{
    @OneToMany(fetch = FetchType.LAZY, mappedBy = "abpk.b")
    @Cascade({ org.hibernate.annotations.CascadeType.ALL,
               org.hibernate.annotations.CascadeType.DELETE_ORPHAN })
    private List<AB> abList;
}

1 个答案:

答案 0 :(得分:0)

这取决于您如何设置级联策略。如果您已将其设置为CASCADE_TYPE ALL,那么理论上它应该会持续存在。

但无论如何,当你试图坚持联想时,最好连接两方的关系。