2017-06-29 3 views
0

私は問題に直面しており、何がうまくいかないのか分かりません。 cenary:Hibernate 5 + Non JTAデータソース:オブジェクトが格納されていません

  • Hibernateは5
  • Apache Tomcatの9
  • JSF 2

ありません春。私はこの問題がSpringの使用で実際に起こっているのを見たので、これは重要ですが、これは私の場合ではありません。

データソースはTomcat上で正しく構成されており、Hibernateは新しいEntityごとにテーブルと更新スキーマも正しく作成します。

問題は、新しいエンティティを永続化しようとすると何も起こりません。

javax.persistence.TransactionRequiredException:進行中のトランザクションがない

それから私は、「フラッシュ()」と呼んで...しかし、私は私がアクティブな何のトランザクションを持っていないというエラーを持っている含めるしてみました

トランザクション要求に関連した問題のようですが、私も試してみました:

  • は法上の「@Transactional」注釈を含めます。
  • には、クラスの "@Transactional"アノテーションが含まれています。
  • "beginTransaction()"コールでトランザクションを開始しますが、次にNullPointerを取得しました。

だから私は何をするのか分かりません。

私の関連コードが表示されます。この問題を解決するのに手伝ってもらえますか?

persistence.xmlファイル:

<persistence-unit name="hospitalPU" transaction-type="RESOURCE_LOCAL"> <description> Persistence unit for Hibernate </description> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <non-jta-data-source>java:comp/env/jdbc/hospitalDatasource</non-jta-data-source> <properties> <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> <property name="hibernate.show_sql" value="true" /> <property name="hibernate.hbm2ddl.auto" value="update" /> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> <property name="hibernate.format_sql" value="true" /> <property name="hibernate.default_catalog" value="hospital" /> <property name="hibernate.connection.datasource" value="java:comp/env/jdbc/hospitalDatasource"/> <property name="hibernate.id.new_generator_mappings" value="false" /> </properties> </persistence-unit>

マイエンティティ:私のマネージドBeanの

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

private static final long serialVersionUID = 1L; 

@Id 
@GeneratedValue 
private Integer id; 

here goes another fileds and getters/setters... 

、私が持っている:

@PersistenceUnit 
private EntityManagerFactory emf; 

そして:

protected synchronized EntityManager getEntityManager() { 
    if (emf == null) { 
     emf = Persistence.createEntityManagerFactory("hospitalPU"); 
    } 
    return emf.createEntityManager(); 
} 

正常に動作するようですが、問題はここに起こる:これにより

を、何も起こりませんし、何の例外occours。ただ、何も起こりません。これにより

getEntityManager().persist(getDominio()); 

、私が持っている "javax.persistence.TransactionRequiredExceptionを:進行中のトランザクションがない":私が間違っているのは何

getEntityManager().persist(getDominio()); 
getEntityManager().flush(); //exception occours here! 

?すべてのあなたのために事前にありがとう!

答えて

0

persistence.xmlまたはhibernate.cfg.xmlを詳細に設定する必要があります。これらのxmlファイルを設定するには、以下のリンクを参照してください。

https://gist.github.com/imanoleizaguirre/3819393

http://www.journaldev.com/7122/jsf-spring-hibernate-integration-example-tutorial

http://www.javaknowledge.info/simple-crud-using-jsf2hibernate-integration-and-mysql/

+0

ご回答ありがとうございます@Mayank。 しかし、私のために働いていない。私はこの勧告の後に同じエラーがありました: https://gist.github.com/imanoleizaguirre/3819393 2番目と3番目のリンクは、Springまたはそれ以前のバージョンのJPA /休止状態。とにかくありがとうございます。 –

0

ここにこの1つは、明らかに問題が何であるかを説明します "javax.persistence.TransactionRequiredException:進行中のトランザクションがない" まず

あなたは、JTA以外のデータソースを使用していることを明確に記載しています。つまり、コンテナがトランザクションの境界を管理しなくなります。自分でトランザクションを開始し、コミット/ロールバックする必要があります。したがって、以下を実行する必要があります。

EntityManager em = .... 
EntityTransaction et = em.getTransaction(); 
try { 
    et.begin(); 
    em.persist(entity); 
    et.commit(); 
} catch (Exception ex) { 
    et.rollback(); 
    throw new RuntimeException(ex); 
} 
関連する問題