OneToMany关系上的Hibernate Cascade操作提供了更新查询

时间:2012-02-23 06:56:54

标签: hibernate jpa hibernate-mapping hibernate-onetomany

@Entity
@Table(name="table1")
public class Parent{

    @Id
    @Column(name="Parentid")
    private String Parentid;

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    @JoinColumn(name="Parentid" referencedColumnName="Parentid")
    private List<Child> objChild;
    .....//getters and setters
}

Child使用复合主键。并且代码是: -

@Embeddable
public class ChildPk{

    @Column(name="...")
    private String str1;

    @Column(name="...")
    private String str2;
    .....//getters and setters
}

@Entity
@Table(name="table2")
public class Child{

    @Column(name="Parentid", nullable="false")
    private String Parentid;  //this the foriegn key referencing Entity1

    @EmbeddedId
    private ChildPk objChildPk;

    .....//getters and setters
}

根据上面的代码,我有一个父母与孩子的一对多关系。并且Child包含一个Composite键作为其主键。

我使用复合键填充Child,将其添加到Parent,填充Parent,并使用session.save()保存Parent。这个成功执行插入语句在Child上。同样的方法,如果我尝试插入另一个Child对象,但包含与之前但不同的外键相同的复合键,然后尝试再次保存Parent对象,它实际上更新Child中的现有行与新Parentid。

根据关系数据库,我的理解是Child表中的复合键的重复输入应该无法插入。但是,Hibernate正在更新现有行,因为值相同(??)。我尝试为复合键插入不同的值,并在Child表中插入正常。

我希望我能让你正确理解这个问题。两个表之间存在单向一对多关系,其中更新发生在具有相同值的行上。

我感到困惑的是它是一对多或复合键的问题。

0 个答案:

没有答案