假设我有实体 A 和实体 B。实体 A 与 B 有 @OneTomany 关系。
我只想在 A 中有一个或多个与之关联的子对象时才在 A 中保留行,否则会引发异常。
我怎样才能在hibernate中实现上述要求
假设我有实体 A 和实体 B。实体 A 与 B 有 @OneTomany 关系。
我只想在 A 中有一个或多个与之关联的子对象时才在 A 中保留行,否则会引发异常。
我怎样才能在hibernate中实现上述要求
您忽略了提及您使用的是什么版本的 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 拉入您的项目才能执行此操作。
实体类: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();
}
} }
我认为您应该尝试上面的代码。这会帮助你。