2012-11-28 228 views
0

比方说,我有实体A和实体B.实体A与B.休眠父子关系

我要坚持一排只有当它有它在其他一个或多个相关子对象的@OneToMany关系抛出异常。

我如何能实现在休眠

回答

1

上述要求你忘了提及你使用的是什么版本的Hibernate。无论如何,这都属于验证的范围。幸运的是,在休眠3和4都可以利用Hibernate验证做的工作:

public class EntityB implements Serializable { 
} 

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

您可能需要在Hibernate验证罐子拉进你的项目,以便能够做到这一点。

1

实体类:Register.class

公共类注册{

私人长期的RegID;

@OneToMany(的mappedBy = “REG”)

私人集addrSet;

公共集getAddrSet(){

return addrSet; 

} 

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

}

实体类:Address.java

公共类地址{

对象值;

@ManyToOne

private register reg;

公共寄存器getReg(){

return reg; 

} 

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

}

公共无效类searchObject(){

公共列表LST; 公共登记searchRegisterRow(龙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(); 

     } 

}}

我想你应该尝试上面的代码。这会帮助你。