2012-11-13 7 views
5

私は何らかの意味をなすことができないHibernateに(私にとにかく)奇妙な問題を持っています。 コードは以下のケースは私の集約ルートであることと、追加のエンティティCaseToSuggestionを使用して、エンティティのケースと提案間の属性とManyToOneの関係をモデル化で私の試みです:Hibernateは新しい子エンティティのためにゴーストエントリーを生成します

@Entity 
@Table(name = "sga_cases") 
public class Case { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    // Business key 
    @Column(name = "caseid", unique = true, nullable = false) 
    private String caseId; 

    ... 

    @OneToMany(mappedBy = "associatedCase", orphanRemoval = true, cascade = CascadeType.ALL) 
    private Set<CaseToSuggestion> associatedSuggestions = new HashSet<CaseToSuggestion>(); 

    ... 
} 


@Entity 
@Table(name = "sga_suggestions") 
public class Suggestion { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name = "suggestionid", unique = true, nullable = false) 
    private String suggestionId; 

    @Column(name = "localizationkey", nullable = false) 
    private String localizationKey; 

    @OneToMany(mappedBy = "associatedSuggestion", orphanRemoval = true, cascade = CascadeType.ALL) 
    private Set<CaseToSuggestion> caseMapping = new HashSet<CaseToSuggestion>(); 

    ... 
} 


@Entity 
@Table(name = "sga_case2suggestion") 
public class CaseToSuggestion { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @Column(name = "feedback") 
    private float feedback; 

    @ManyToOne 
    @JoinColumn(name = "caseid") 
    private Case associatedCase; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "suggestionid") 
    private Suggestion associatedSuggestion; 

    ... 
} 

私は上記のエンティティのための新しいオブジェクトを作成した場合、適切な関連付けを設定してからのEntityManagerすべてが正常に動作して保管してください:

私は新しいASSOを追加したい場合は entityManager.persist(c);

続く

Case c = new Case(...) 
Suggestion sugg = new Suggestion(...); 
CaseToSuggestion case2sugg = new CaseToSuggestion(c, sugg, 1.0f); 

c.getAssociatedSuggestions().add(case2sugg); 
sugg.getAssociatedCases().add(case2sugg); 

CaseToSuggestion c2s = new CaseToSuggestion(c, s, fb); 
c.getAssociatedSuggestions().add(c2s); 
s.getAssociatedCases().add(c2s); 

entityManager.merge(c);

CaseToSuggestionエンティティが続く:私はのEntityManagerから関連付け、新しいCaseToSuggestionにそれらを追加したい場合や提案エンティティを取得し、データベースにすでにある場合にciationデータベースに保存されているが、すべてのエントリのために私はnullを新しい生成されたIDを持つ「ゴーストエントリ」とすべてのフィールドを取得します

+----+----------+--------+--------------+ 
| id | feedback | caseid | suggestionid | 
+----+----------+--------+--------------+ 
| 3 |  1 |  3 |   1 | 
| 4 |  1 |  4 |   2 | 
| 5 |  1 |  5 |   2 | 
| 6 |  0 | NULL |   NULL | 
| 7 |  1 |  6 |   2 | 
| 8 |  0 | NULL |   NULL | 
| 9 |  1 |  7 |   2 | 
| 10 |  0 | NULL |   NULL | 
+----+----------+--------+--------------+ 

誰もがこれを引き起こす可能性がありますどのような考えを持っていますか?

+0

どのようなかなり最初の質問(深刻) – Sheena

+1

私はこの問題がカスケードにあるかもしれないと思う、アグリゲートルートからの依存関係ツリー 'Case - > CaseToSuggestion - >提案 'をカスケードだけを残して、他の方向に進む。 – Augusto

+0

ヒントをありがとう。私は 'Suggestion'でカスケードを削除しましたが、残念ながら問題はまだ残っています。 – fiendie

答えて

1

OK、取得しました。 OneToMany-Mappingを削除すると、問題が解決しました。

関連する問題