hibernate父子关系

时间:2012-11-28 07:36:19

标签: java

假设我有实体A和实体B.实体A与B有@OneTomany关系。

我想在A中保留行,只要它有一个或多个子对象与之关联,否则抛出异常。

如何在hibernate中实现上述要求

2 个答案:

答案 0 :(得分:1)

您忽略了提到您正在使用的Hibernate版本。无论如何,这属于验证的范围。幸运的是,在Hibernate 3和4中,您都可以利用Hibernate Validator来完成这项工作:

public class EntityB implements Serializable {
}

public class EntityA implements Serializable {
    @NotNull
    @Size(min = 1)
    private Set<EntityB> relatedEntities;
}

您可能需要将Hibernate Validator jar插入到项目中才能执行此操作。

答案 1 :(得分:1)

实体类:Register.class

公共类注册{

私人Long regId;

@OneToMany(mappedBy =“reg”)

private Set addrSet;

public Set getAddrSet(){

    return addrSet;

}

public void setAddrSet(Set<Address> addrSet) {
    this.addrSet = addrSet;
}

}

实体类:Address.java

公共类地址{

对象值;

@ManyToOne

私人注册;

公共注册getReg(){

    return reg;

}

public void setReg(Register reg) {
    this.reg = reg;
}

}

public void class searchObject(){

public List lst;    公共注册searchRegisterRow(Long regId){

  Session session = null;

 SessionFactory sessionFactory = null;

 register result = null; 

    try{    

       sessionFactory = new Configuration().configure().buildSessionFactory();      
        session =sessionFactory.openSession();
       String SQL_QUERY ="from Register r where r.redId = "+regId;
       Register reg = session.createQuery(SQL_QUERY);  

             for(Iterator it=lst.iterator();it.hasNext();){


                             reg=(Register)it.next();

            if(reg.getAddrSet().size() > 0){

                              result = reg;

                            }
                            else{

                                throw new Exception();

                            }

        }

        return result;
    }
    }catch(Exception e){

        System.out.println(e.getMessage());

    }finally{
        // Actual contact insertion will happen at this step
        session.flush();

        session.close();

        }

} }

我认为你应该尝试上面的代码。这对你有帮助。