2011-01-14 7 views
1

JPA 2のOpenJPA実装を使用していて、オブジェクトをデータベースに永続させることに問題があります。私はコンテナ(Websphere)で管理されているトランザクションを使用したいので、トランザクションは管理されているので、tx.begin()、tx.commit()などの定型コードは必要ありません。管理対象トランザクションが永続オブジェクトでないJPA 2

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="buildTest" transaction-type="JTA"> 
     <jta-data-source>jdbc/lfcbuild</jta-data-source> 
     <class>entities.Build</class> 
     <properties> 
      <property name="openjpa.jdbc.Schema" value="APP"/> 
      <property name="openjpa.TransactionMode" value="managed"/> 
      <property name="openjpa.ConnectionFactoryMode" value="managed"/>      
     </properties> 
    </persistence-unit> 
</persistence> 

ビルドを永続化するとき、私は実行していたコードはこれです:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("buildTest"); 
EntityManager em = emf.createEntityManager(); 

Build b = new Build(); 
b.setFirstName("Dick"); 
b.setLastName("Tracy"); 

em.persist(b); 

コードが実行され、一切の例外をスローしません。私がデータベースをチェックすると、何も保持されていません。私は何か不足していますか、これはオブジェクトがコンテナ管理のトランザクションで持続するのに十分であるべきですか?

答えて

0

このコードはEJBの一部ですか?それ以外の場合は、プログラムでTxを起動してコミットする必要があります。

+0

いいえ、EJBの一部ではありません。実際にはOSGiバンドルで動作しています。 – stuff22

+0

txがないのでエンティティマネージャがTxの最後にフラッシュされていないようです。ステートレスなEJBメソッドにそのコードを置き、何が起こるかを確認できますか? EJBがなければ、定型文tx.begin()などが必要です。 –

関連する問題