0

私は休止状態で EJB の初心者です。私はこの単純なORMを持っています:

ユーザー -> 所属先 -> グループ

私は、同じグループに属する複数の新しいユーザーを作成するために、他の言語で次のことを行っていました。

    Group g = new Group();
    groupsManager.create(g);

    User u1 = new User("Tom");
    User u1 = new User("Jerry");

    u1.setGroup(g);
    u2.setGroup(g);

    usersManager.create(u1);
    usersManager.create(u2);

レコードが作成されていますが、各ユーザーが同じグループに属しているのではなく、最終的に 3 つのグループがあります。

これらは両方のエンティティ クラスです。

@Entity
@Table(name="Users")
public class User extends AbstractEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    public User() {
        super();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    //*** Some other Fields


    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
        @JoinColumn(name="group_id")
    private Group group;

    //*** Setter and Getters
}

そしてグループ:

@Entity
@Table(name="Groups")
public class Group extends AbstractEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    public Group() {
        super();
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    @OneToMany(cascade = CascadeType.ALL)
     private Set<User> users;
}
4

2 に答える 2

0

{groupsManager,usersManager}.create() メソッドは個別の EntityManager インスタンスを使用するため、複数の Group インスタンスが作成されると思います。すべての操作のコンテキストとして同じ EntityManager を使用するようにしてください。

別々のデータモデルや異なるデータベースへの複数の接続など、複数の永続的なコンテキストを同時に持つことができるため、このように機能します。

次のことをお勧めします。

  • (標準で定義されているように) JPA を適切に基礎から学び、単一のプロプライエタリ プロバイダーの実装として Hibernate に焦点を当てないでください。
  • JavaEEアプリケーションサーバーのコンテキストでJPAがどのように機能するかを学ぶ
  • DAO パターンを使用しないでください。JavaEE5 以前 (2009 年以前) に関連していましたが、現在はほとんどの場合、EntityManager を直接使用するだけで十分です (例: EntityManager.persist の呼び出し)。
于 2013-06-10T07:24:30.840 に答える