エンティティ A とエンティティ B があるとします。エンティティ A は B と @OneTomany 関係を持っています。
1つ以上の子オブジェクトが関連付けられている場合にのみ、Aの行を永続化したいのですが、それ以外の場合は例外をスローします。
休止状態で上記の要件を達成するにはどうすればよいですか
エンティティ A とエンティティ B があるとします。エンティティ A は B と @OneTomany 関係を持っています。
1つ以上の子オブジェクトが関連付けられている場合にのみ、Aの行を永続化したいのですが、それ以外の場合は例外をスローします。
休止状態で上記の要件を達成するにはどうすればよいですか
エンティティクラス:Register.class
パブリッククラス登録{
プライベートLongregId;
@OneToMany(mappedBy = "reg")
private Set addrSet;
public Set getAddrSet(){
return addrSet;
}
public void setAddrSet(Set<Address> addrSet) {
this.addrSet = addrSet;
}
}
エンティティクラス:Address.java
パブリッククラスアドレス{
オブジェクト値;
@ManyToOne
プライベート登録登録;
public Register getReg(){
return reg;
}
public void setReg(Register reg) {
this.reg = reg;
}
}
public void class searchObject(){
パブリックリスト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();
}
}}
上記のコードを試してみるべきだと思います。これはあなたを助けます。
使用している 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 をプロジェクトに取り込む必要がある場合があります。