2

私には2つのエンティティがあります。スポーツ:

@Entity
public class Sports implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "SPORT_NAME")
    private String name;
...
}

およびSportFacility:

@Entity
public class SportFacility implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(name = "SPORTFAC_NAME")
    private String name;
    @OneToMany
    private List<Sports> sports;

....
}

次に、Sportsテーブルにいくつかのスポーツを作成しました。たとえば、次のようになります。

--id-----name-----
- 0  - Football  -   
- 1  - Basketball-
- 2  - Golf      -
------------------

そして、私はいくつかのスポーツでスポーツ施設を作る必要があります。すべてのスポーツを取りましょう

        List<Sports> listSports = sb.getAllSports(); //JPQL: SELECT s FROM Sports s

        SportFacility sportFacility = new SportFacility("Stadium", listSports);

        em.getTransaction().begin();            
        em.persist(sportFacility);            
        em.getTransaction().commit();  

エラー:

java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: database.entities.sports[ id=0 ].

テーブルにスポーツがほとんどなく、同じスポーツで新しいレコードを作成する必要がないため、Cascade.ALLまたはPERSISTを使用したくありません...ありがとうございます。

4

2 に答える 2

0

例外は、SportFacilityを永続化しようとすると、取得したSportsのコレクションが永続化コンテキストに存在しなくなるという事実に関連しています-永続化コンテキストはデフォルトでトランザクションスコープ(トランザクションの開始時に作成され、終了時に破棄されます)-およびEL制御していないオブジェクトをどうするかわかりません。

動く

em.getTransaction().begin();

最初に。

于 2012-12-05T10:54:57.037 に答える
0

何を、

sb.getAllSports();

行う?同じEntityManagerを使用していますか、それとも別のEntityManagerを使用していますか?

database.entities.sports[ id=0 ]

エラーは、あなたのスポーツの1つが0 IDを持っていることを示しているようですが、これは非常に奇妙に思えますか?スポーツを正しく続けましたか?

于 2012-12-05T13:46:20.950 に答える