私はこれをHibernateで必要な方法で解決することはできません。ここでは:私は製品を持って、各製品はそれ自身のフィールドなどを持っています。各製品はTopLevelProductまたはSecondaryProductのいずれかになります。セカンダリ製品はトップレベル製品にリンクされ、トップレベル製品は何もリンクされません。データベースから製品を照会するとき、TopLevelかどうかを知りたいです。リンクされたセカンダリ製品のリストは、後で(またはそれ以前にも取得できますが、それほど必要ではありません)取得できます。Hibernateモデリングの質問
私はこのBeanを使用したものと考える:
public class Product{
...properties..
Product topLevelProduct;
...getters and setters...
}
問題は、私はtopLevelProductプロパティになど多対1のマッピングた場合、私はトップレベルの製品を削除する問題を抱えているということです。彼らはにリンクされている二次製品を持っている場合、実際には、私が取得:
java.sql.BatchUpdateException: Cannot delete or update a parent row: a foreign key constraint fails (`jacciseweb`.`prodotti`, CONSTRAINT `FKC803BB11ACD3B812` FOREIGN KEY (`prodottoDiRiferimento_ID`) REFERENCES `prodotti` (`ID`))
私はTopLevelProductを削除した場合、secondLevelProductsがあまりにも削除されることを期待します。私は別の構造を使うべきですか?たぶん同じものから派生した2つの豆を使用していますか?あるいは、このような関係を逆転させる:
public class Product{
...properties..
List<Product> secondLevelProducts = new ArrayList<Product>();
...getters and setters...
}
する。これは、とにかく私に問題を与える:私はちょうどそれが任意の二次製品をしていないことを知っているので、製品が二次的であるかどうかを知るために別のクエリを使用する必要があり、」doesnのそれは二次的であることを意味し、secondLevel製品を持たないトップレベル製品でさえあり得る。
アイデア?
:
そうしないと、あなたは、このような何かを
Product
sの間の双方向の関係を作成することで、あなたの問題を解決することができます。問題は、セカンダリBeanにtopLevelProductを設定するたびに、私は手動でsecondaryProductsを更新する必要があることです。これを自動的に行う方法はありますか? – gotch4私は第2の試みを試みました。問題は、 "secondaryProducts"プロパティがPersistentBagで満たされていて、セカンダリBeanがあっても埋められないということです。なぜこれ? – gotch4