2016-11-28 15 views
0

私は2つのモデルクラス、UserとSalutationを以下のように持っています。 Userテーブルの外部キー(salutation_id)はオプションです。私がセッションオブジェクトをマージした直後にフラッシュするときにUserオブジェクトを保存するには、以下のエラーが発生しています。オブジェクトは未保存の一時的インスタンスを参照します - フラッシングする前に一時インスタンスを保存します:com.example.model.Salutation

オブジェクトが保存されていない一時的なインスタンスを参照する - フラッシュする前に一時的なインスタンスを保存します。com.example.model.Salutation表の敬称で

データがユーザテーブルから独立して挿入されています。 salutation_idを持つUserオブジェクトをnullとして保存しようとすると、このエラーがスローされます。

助けがあれば助かります。

@Entity 
@Table(name = "user") 
public class User implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

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

    @Column(unique = true, nullable = false) 
    private String userName; 

    @ManyToOne 
    @JoinColumn(name = "salutation_id") 
    private Salutation salutationRef; 

    //Getter and Setter 
} 

@Entity 
@Table(name = "salutation") 
public class Salutation implements Serializable { 

    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

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

    @ElementCollection 
    @LazyCollection(LazyCollectionOption.FALSE) 
    @OneToMany(mappedBy = "salutationRef") 
    private List<Salutation> salutations; 

    //Getter and Setter 

} 



public Object create(Object object) { 
    Session session = sessionFactory.getCurrentSession(); 
    Transaction txn = session.beginTransaction(); 

    try { 
     object = (Object) session.merge(object); 
     session.flush(); //Getting error at this line object references an unsaved transient instance - save the transient instance before flushing: com.example.model.Salutation 
     txn.commit(); 
    } catch (Exception e) { 
     txn.rollback(); 
     e.printStackTrace(); 
    } 

    return object; 
} 

ありがとうございました。

答えて

0

私はこの問題を自分で解決しました。他人を助けることができるように私の質問に答える。

問題は、ユーザーの下でSalutationオブジェクトで発生していました。敬称が初期化され、主キー 'id'がnullになっています。したがって、セッションオブジェクトをフラッシュしようとすると、SalutationのIDがnullであることが判明し、このため、このエラーが発生していました。 Salutationオブジェクトにnullを設定すると、私の問題が解決しました。

0

は私がmerge()here

与えられたインスタンスはセッションに関連付けられてはなりませんためのマニュアルに従って、Hibernateを使った専門家ではないけど、。

現在SessionEntityをフェッチし、フィールドの値を変更してからフラッシュすることをお勧めします。

または、新しいエンティティの場合 - save()です。

また、私が知る限り、Transaction.commit()は、セッションのフラッシュを実行するので、手動で行う必要はありません。

+0

入力いただきありがとうございます。それは有り難いです。 –

関連する問題

 関連する問題