1

現在、ステートレスセッション内でトランザクションを実行する際に問題があります。 iが(メソッドが1つのトランザクションであることが必要であるため、必要とされる)@Transactionalアノテーションを使用してトランザクションを定義したサービス層上@Transactional内のステートレスセッション

。 メソッドの中で私は新しいエンティティCarを作成します。 は、しかし、私はまた、この

StatelessSession session = getSessionFactory().openStatelessSession(); 
Transaction transaction = session.beginTransaction() 

// create and setup CarRequirements entity 

transaction.commit; 

問題のようなカスタムステートレスセッション(そのパフォーマンスのために行われる)内transtaction下地の方法で作成する必要が実体CarRequirementsがエンティティCarへの外部キーを持っているということです。したがって、私はunderlayingトランザクションをコミットしようとすると、明らかにCarエンティティがまだデータベースにコミットされていないので、例外が発生します。

Carエンティティのトランザクションまたは強制コミットのコミットを延期する方法はありますか?その後、これらのエンティティがマッピングされている方法CareRequirements

+0

を保存 – davidxxx

+0

は、これらのエンティティは、すでに関係を持っているので、車 – toucheqt

答えて

2

はどちらかあなたはCarRequirementsとカー(カスケード) 間の関係を定義するか、最初に車を保存する必要がありますか? CarRequirement @davidxxx
+0

カスケードの参照主キーは私のためのオプションではないことを外部キーを持っている(CarRequirementは、外部キーを持っている車の参照主キー)。他の提案については 、私は最初にCarを保存していますが、トランザクションアノテーション内にあるため、ステートレスセッション内でコミットされるCarRequirementより後でコミットされます。 今のところ私は方法を2つに分割して解決しました。 1つはトランザクションアノテーションによってマークされ、カーを作成してコミットし、ステートレスセッションではCarRequirementsエンティティを作成します。それはこの方法で動作しますが、私はそれを分離させるのが好きではありません。 – toucheqt

関連する問題