JPAでは、JPAオブジェクトのカテゴリのリストを含むJPAオブジェクトの更新画面を作成しようとしています。これは多対多関係です。JPA ManyToManyオブジェクトのプロパティを設定しない
次のプロパティを持つJPAオブジェクト内のテーブルに結合関係を作成しています。
私はデータベースを更新しましたし、すべてがDB内偉大であるようClasses.java
@JoinTable(name = "classes_has_class_categories",joinColumns = {
@JoinColumn(name = "classes_id", referencedColumnName = "id")}, inverseJoinColumns = {
@JoinColumn(name = "class_categories_id", referencedColumnName = "id")})
@ManyToMany(cascade = CascadeType.ALL)
private Collection<ClassCategories> classCategoriesCollection;
私の質問への鍵は、以下のロジック内に含まれています。しかし、私の問題は、後でオブジェクトにアクセスすると、オブジェクト内のclassCategoriesCollectionプロパティにすべての正しいオブジェクトが含まれていないことです。私は、以下の私のフラッシュとリフレッシュ・コールはすべてをデータベースと同期させると思っていましたが、アプリケーションを再デプロイ/再コンパイルするまで、そのオブジェクト・プロパティは空です。このオブジェクトをオブジェクトの現在のデータベースと同期させる方法を知ってお手伝いください。
ClassManager.java
for(String c : cats)
{
int cId = ConvertToInt(c);
ClassCategories ca = em.find(ClassCategories.class, cId);
if(ca != null)
{
try{
if(!cla.getClassCategoriesCollection().contains(ca))
{
ClassHasCategoriesPK classHasCategoriesPK= new ClassHasCategoriesPK();
classHasCategoriesPK.setCategoryId(ca.getId());
classHasCategoriesPK.setClassId(cla.getId());
ClassHasCategories cd = new ClassHasCategories(classHasCategoriesPK);
em.persist(cd);
em.flush();
}
}
catch (Exception ex)
{}
}
}
em.persist(cla); //cla is the Class object instance.
em.flush();
em.refresh(cla);
後でコードで....
request.setAttribute("classCategories",cl.getClassCategoriesCollection());
は、アプリケーションの再コンパイルまで右のクラスを持っていません。
JPAを初めてお使いいただきありがとうございます。関係を適切にマップする方法をまだ検討しています。私は固体の本をピックアップする必要があります。 – JCab
喜んでサービスします。 JPAにはその特質がありますが、その中には経験豊富なプログラムでさえも、実際にどのように物事が行われているのかを知るまでは動かないものがあります。私が言うことができるのは、「そこにいて、それをした」ということです。 –