0

私は Hibernate を初めて使用しますが、ここで一時的な例外が発生します。助けてください。

オブジェクト object の保存中に例外が発生しましLocationた 保存されていない一時インスタンスを参照しています - フラッシュする前に一時インスタンスを保存してください:<City object>; nested exception is org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing

すべての要素が null を参照している City オブジェクトを持つロケーション テーブルにデータを保存しようとすると、例外が発生します。

Location object       
   private String LocationAddress;  
   @ManyToOne
   @JoinColumn(name = "CITYID")
   private City city;


City
   private String cityName;
   private int cityId;

Location テーブルでは、必須フィールドではないCityIDため、NULL 可能フィールドです。cityまた、静的テーブルである都市テーブルがあるため、都市テーブルにデータを挿入したくありません。ここで、Location オブジェクトを格納しています。City オブジェクトに都市のような値がある場合、データを正常に保存します。ただし、オブジェクトに空白のオブジェクトが含まれている場合(cityNameおよびcityIdnullの場合)は例外をスローします

助けてください。

シナリオ例

Successful
      Location 
       locationAddress = "test Address"
        city 
           cityId="1"
           cityName="testCity"

Failure
      Location 
           locationAddress = "test Address"
           city 
               cityId=null
               cityName=null
4

2 に答える 2

0

コードを見ずに確実に言うのは難しいですが、クラスを保存するCity前に保存していないようです。Location永続化するには、次の 2 つのオプションがあります。

注釈を使用@Cascadeして、挿入を親から子にカスケードすることができます。これを行うと、クラスを永続化するだけでLocation、Hibernate が残りを処理します。

@ManyToOne
@JoinColumn(name = "CITYID")
@Cascade(CascadeType.PERSIST)  //Or ALL if you want Updates, Deletes to go to
private City city;

詳細は@Cascade こちら

それをしたくない場合は、City保存する前にクラスを明示的に永続化する必要がありますLocation

于 2013-01-24T22:52:28.937 に答える
0

Location実際にno を参照するインスタンスを保存しようとしている場合は、どのフィールドが であるかのインスタンスを作成するのではなく、を参照するCity必要があります。Location.CitynullCitynull

( Hibernate ではCity、どのフィールドのインスタンスが、どの列の値がどのテーブルにnull新しいレコードが必要であるかのように見なされますが、これはあまり意味がありません)citiesnull

于 2013-01-24T23:06:47.537 に答える