2016-07-31 10 views
0

自己を参照する「カテゴリ」エンティティがあります。自己参照エンティティは2つのレコードを挿入します

@Entity 
public class Category extends NamedEntity { 

    private String slug; 

    private int position; 

    @ManyToOne(cascade = { CascadeType.PERSIST }) 
    private Category parent; 

    @OneToMany(mappedBy = "parent") 
    private Set<Category> children = new HashSet<Category>(); 

    ... getters/setters ... 

私は親を持たないエンティティを保存すると、それは「2」レコードを挿入します。

を| ID | NAME | POSITION | SLUG | PARENT_ID |

| 1 | 1 | 1 | 1 | 2 |

| 2 | null | 0 | null | null |

PARENT_IDがnullの "one"レコードを挿入したかったのですが、レコード(id = 2)とレコード(id = 1)を子として挿入します。

public interface CategoryRepository extends Repository<Category, Long> { 
    public Category findById(Long id) throws DataAccessException; 
    public Category save(Category category) throws DataAccessException; 
} 

答えて

0

は、以下にparentのためにあなたのマッピングを変更し、それはないでしょう:

私は春データJPAインタフェースAPIを使用してレコードを保存します。

@ManyToOne 
private Category parent; 

あなたは、この動作を観察する理由はCascadeType.PERSISTは、Hibernateはちょうどnull'd親と子レコードを作成するのではなく、あなたのための新しい空のカテゴリを作成するということです。

+0

カスケードオプションを削除すると、 '' TransientPropertyValueException''例外が発生します。だから私は '' 'CascadeType.PERSIST'''を入れます。 例外の説明は、 '' 'オブジェクトが未保存の一時インスタンスを参照しています - beforeQuery flushing'''の一時インスタンスを保存します。 ありがとうございます。 – nasiajai

+0

値を 'null'に明示的に設定しても不平を言ってはいけません。 – Naros

+0

私はそれが同じ結果になると言わなければならないので、すみません。 – nasiajai

関連する問題