Hibernate一次在同一个事务中保存多个相关对象

时间:2016-12-22 18:14:03

标签: hibernate

我正在一个事务中一次保存多个相关对象,我正在寻找远离以防止保存子对象时ConstraintViolationException

代码看起来像这样。

try{
    //with given session
    session.getTransaction().begin();
    session.save(objectA);
    objectB.setObjectA(objectA);
    //do something with object B before save
    session.save(objectB);
    if(!objectB.getObjectCSet().isEmpty()){
        for(ObjectC objectC:objectB.getObjectCSet){
             objectC.setObjectB(objectB);
             //do something with object C before saving
            session.save(objectC);
        }
    }
    session.getTransaction().commit();
}catch(Exception e){
    session.getTransaction().rollback();
}finally{
    if(session != null){
        session.flush();
        session.clear();
        session.close();
    }
}

如果我没有弄错,我可以使用级联并执行类似session.save(objectA);的配置cascade="save"。我不知道hibernate如何处理级联,但我想知道它是否有类似的东西。

1 个答案:

答案 0 :(得分:0)

假设ObjectA到ObjectB和ObjectB到ObjectC之间存在实体关联,当您使用@O​​neToMany等定义实体关联时,可以使用cascade=CascadeType.ALL