2011-06-28 32 views
1
Entity 
@Table(name = "ADDRESS") 
public class Address { 

    @Id 
    @Column(name = "ID") 
    @GeneratedValue 
    private int addressid; 

    @OneToOne 
    @JoinColumn(name = "CITY_ID",nullable = true,insertable=false, updatable=false) 
    private City city = new City(); 

    @OneToOne 
    @JoinColumn(name = "DISTRICT_ID",nullable = true,insertable=false, updatable=false) 
    private District district = new District(); 
} 

こんにちは、 私はAddressというクラスがあり、このクラスをDISTRICT_ID = nullで休止状態で保存することはできません。TransientObjectException

エラーが

org.hibernate.TransientObjectExceptionです:オブジェクトが保存されていない一時的なインスタンスを参照する - フラッシュする前に一時的なインスタンスを保存します。form.District

私はちょうど私が行方不明ですかわかりません... ..

+0

クラスのコードとおそらく保存しようとしているコードを投稿してください。何が間違っているのか理解するのに役立ちます。 –

答えて

1

同じオブジェクトにcity_idとcity_nameを持つことを考慮する必要があります。市区町村テーブルを読み込み専用にしたい場合は、都市と地区を永続化しないでください。

0

地区に@Entityと注釈されていますか?
おそらく例 @OneToOnecascadeを指定する必要があります。@OneToOne(cascade={CascadeType.PERSIST})

+0

はいです。 CascadeType.PERSISTは何をしますか?それも仕事をしなかった。私がしたいのは、時には地区IDにnull値を割り当てることです。 – Gary

+0

それは地区のエンティティを存続させます。新しいdestrictエンティティを作成し、それをAddress.districtおよびpersistアドレスに割り当てます。 districtがnullでない場合は、それも永続化する必要があります。これが例外を受ける理由です。あなたがカスケードし続けると、地区も永続化されます。 – Tarlog

2

あなたはdistrictnullになりたい場合は、それが実際にnullむしろ新しい一時的なインスタンスを指しているよりも次のようになります。

@OneToOne 
@JoinColumn(name = "DISTRICT_ID",nullable = true,insertable=false, updatable=false)  
private District district = null; 
+0

いいえ私はそれをnullにしたくありません。DISTRICT_IDをnullにすることをお勧めします。それがnullでない場合、それはうまく動作します – Gary

+1

私は問題が実際にnullに設定されていないと思う。デフォルトでは 'new District()'で新しいインスタンスに設定します。おそらくこれは決して保存されないので、永続化されていないTransientオブジェクトとして知られています。 Addressはこの一時オブジェクトを参照しているため、永続化することはできません。 –

+0

@Gary:DISTRICT_IDは地区インスタンスの@IDに基づいています。したがって、それがnullの場合を除きDISTRICT_IDは常にnullではありません。また、intはヌル可能ではないので、 'Integer' –

0

したい場合DISTRICT_IDがNULLの地区を保存するには、それをプライマリキーとして使用することはできません。そのため、@Idで注釈を付けることはできません。あなたは地区のエンティティに対して異なるIDを選択する必要があります。