2012-01-12 12 views
1

JSF 2.1、Netbeans 7.0.1、Glassfish 3.1.1、JPA + EJBを使用しています。JPAの他のエンティティクラスへの参照を持つエンティティを保持する

たとえば、Userというエンティティクラスがあり、エンティティクラスUserTypeとの参照(多対1の関係)があります。

エンティティUserTypeに関連付けられたuser_typeテーブルには、すでにすべてのユーザタイプがロードされており、このテーブルに追加されるデータはありません。テーブルuser_typeからのデータは、選択にのみ使用されます。

フォームの1つでは、ユーザーに h:selectOneListBoxタグを使用して作成されるUserTypeを選択するように求めます。バッキングBeanでは、新しいUserTypeオブジェクトを作成し、選択したIDをそれに設定し、UserTypeをUserエンティティクラスに配置します。ただし、作成されたUserTypeの他のフィールドはすべてnullです。

私の質問は、JPAはUserエンティティによって参照されるIDを持つUserTypeがすでにデータベースに存在し、既存のレコードを更新(マージ)して作成しようとしないことをJPAに理解させます。新しいもの。 または、必要なエンティティUserTypeをIDでデータベースから事前にロードしてから、UserTypeとUserTypeを更新するようJPAに問い合せる必要がありますか?

答えて

1

<h:selectOneListBox>のコンポーネントのうち、UserTypeIDのみを取得する必要があります。その後、EJBを使用して関係を作成するように要求することができます。次のようになります。

@Stateless 
public class MrStatelessBean { 
    public void createUser(User u, long typeID) { 
     UserType type = em.find(UserType.class, typeID); 
     u.setUserType(type); 
     em.persist(u); 
    } 
} 
関連する問題