假设我有实体A和实体B.实体A与B有@OneTomany关系。
我想在A中保留行,只要它有一个或多个子对象与之关联,否则抛出异常。
如何在hibernate中实现上述要求
答案 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();
}
} }
我认为你应该尝试上面的代码。这对你有帮助。