1

従業員とシフトの 2 つのエンティティ クラスを使用して Java EE プロジェクトを実行していますが、それらの間には多対多の関係があります。次のようになります。



    @Entity
    public class Employee implements Serializable {
    @ManyToMany(mappedBy="employees")
    private List shifts;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String surname;
    private String firstname;


...



    @Entity

    public class Shift implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date timeStart;
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date timeEnd;
    private int workers;
    private int overseers;
    @ManyToMany
    private List employees;

選択したシフトに従業員を (1 人ずつ) 追加したい JSF ページがあるので、バッキング Bean には次のメソッドがあります。



    public void addToShift(Employee e){
            selectedShift.addEmployee(e);
            e.addShift(selectedShift);      
    }

メソッドが呼び出された後、結合テーブルに何も表示されません。entitymanager.find を使用してエンティティを再度検索するなど、いくつかのことを試しましたが、実際には何も役に立ちませんでした。結合テーブルに何も表示されず、理由もわかりません。従業員とシフトの管理に問題はありませんでした。それは「単なる」つながりです.何かアイデアはありますか?

4

1 に答える 1

1

切り離されたエンティティに値を設定するだけでは十分ではありません。トランザクション内でEntityManager.mergeを呼び出す必要があります。その後、トランザクションがコミットされる (またはエンティティ マネージャーがフラッシュされる) と、データベースにも結果が表示されます。

永続化コンテキストがまだ開いている場合(あなたの場合ではありません)、フラッシュだけで十分であり、マージは必要ありません。

于 2012-05-10T18:34:04.113 に答える