0

このウェブサイトへの私の最初の投稿であり、問​​題の解決策が得られると確信しています。私はJPAがあまり得意ではないので、1つの問題で立ち往生しています。完全なコードを共有することはできませんが、次の例で私が達成しようとしていることを理解してください:

underOneMethod(){

Person personObj1 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj1.setFirstName("John");
personObj1 = entityManager.merge(personObj1);
entityManager.flush();

Person personObj2 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj2.setLastName("Cruz");
personObj2 = entityManager.merge(personObj1);
entityManager.flush();

} // This code throws me exception. I think it will work if I use entityManager.clear() method after first flush call but still it will be good, of someone can me some idea of what is happening in this case and how can it be resolved. Thanks in advance..!
4

2 に答える 2

1

さて、私はずっと前に答え​​を得ましたが、ここで答える時間がありませんでした. とにかく、答えるのに良い時期です。すでに私の前のコメントで述べたように。entityManager.clear() メソッドを使用しましたが、うまくいきました。他の誰かにも役立つことを願っています.. !!

underOneMethod(){

Person personObj1 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj1.setFirstName("John");
personObj1 = entityManager.merge(personObj1);
entityManager.flush();

entityManager.clear();

Person personObj2 = entityManager.createNamedQuery("Select * from Person where smthing..");
personObj2.setLastName("Cruz");
personObj2 = entityManager.merge(personObj1);
entityManager.flush();

}
于 2013-03-30T19:30:01.507 に答える
1

あなたのコードはコンパイルさえできず、createNamedQuery は Person ではなく Query を返します。getSingleResult を呼び出すと仮定しますが、それでも createNamedQuery は SQL ではない名前を取るため、createNativeQuery が必要になります。

また、オブジェクトを選択したばかりで、既に管理されているため、マージは必要ありません。

例外スタック トレースと実際のコードを含めると役立ちます。

于 2013-03-25T14:15:51.093 に答える