2012-02-24 11 views
1

私は、一方向の多くの一つにマッピング)(マージ使用してJPA内の1つの関係に多くを削除

@Entity 
public class Item implements Serializable { 
    private Integer id; 
    private Double amount; 
     private Country origin; 

    @ManyToOne(optional=true) 
    @JoinColumn 
    public Country getOrigin() { 
     return this.origin; 
    } 
} 

@Entity 
public class Country implements Serializable{ 

    private String code; 
    private String desc; 
} 

レッツ以下の関係は私が使用してnullにそれを更新することで関係を削除しようとしていますオプションであると言っています以下のコード

Country country = null; 
//item is detached 
item.setOrigin(country); 
em.merge(item); 

しかし、関係が削除されていないことが判明しました。 しかし、countryがNULLでなく、システムがDB内の関係を更新できる場合、このコードは正常に機能します。 nullの場合、単にフィールドを無視します。 希望の結果を得るために、どの設定を変更できるかを指摘できますか?

P.S.私はエンティティCountryを削除したくないのですが、それらの関係を削除するだけです。

+1

実際に 'setOrigin'があると仮定すると、これはうまくいくはずです。おそらく 'em.flush()'を試して、あなたが期待しているものが得られるかどうかを確認する必要があります。 – beerbajay

+1

多分疑問な質問ですが、セッターはどのように見えますか? – Firo

+1

私はcascade = Cascade.MERGEがこの場合に役立つと思います。 @ManyToOne(オプション= true、カスケード=カスケード.MERGE) –

答えて

0

ありがとうございます。間違った質問です。それは実際に動作します。

不正なデータを送信するクライアント側の問題があります。