0

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

我只想在 A 中有一个或多个与之关联的子对象时才在 A 中保留行,否则会引发异常。

我怎样才能在hibernate中实现上述要求

4

2 回答 2

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 拉入您的项目才能执行此操作。

于 2012-11-28T07:46:30.380 回答
1

实体类:Register.class

公共类注册{

私有长 regId;

@OneToMany(mappedBy = "reg")

私人设置地址集;

公共设置 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;
}

}

公共无效类搜索对象(){

公开列表 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();

        }

} }

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

于 2012-11-28T08:51:17.720 回答