2016-07-05 9 views
1

をコミットしていないし、WebLogic 10.3.6SessionFactoryのHibernateは私がオラクル、4休止状態、Spring MVCの3.2.6で動作するOracleデータベース

私は、OracleデータベースにHibernateとJPAを使用してエンティティをコミットします。サーバーコンソールでエラーは表示されません。しかし、Oracleテーブルをチェックすると、新しいレコードは記録されません。

これはAdministrationService.java.IはメソッドcreatePreferenciaを使用

package eusurvey.modelA.daos; 

import java.io.Serializable; 
import javax.persistence.*; 


/** 
* The persistent class for the PREFERENCIAS database table. 
* 
*/ 
@Entity 
@Table(name="PREFERENCIAS") 
public class Preferencia implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="PREFERENCIAS_ID") 
    private long preferenciasId; 

    private String nombre; 

    private String valor; 

    public Preferencia() { 
    } 

    public long getPreferenciasId() { 
     return this.preferenciasId; 
    } 

    public void setPreferenciasId(long preferenciasId) { 
     this.preferenciasId = preferenciasId; 
    } 

    public String getNombre() { 
     return this.nombre; 
    } 

    public void setNombre(String nombre) { 
     this.nombre = nombre; 
    } 

    public String getValor() { 
     return this.valor; 
    } 

    public void setValor(String valor) { 
     this.valor = valor; 
    } 

} 

サービスクラス私のJPAエンティティです。

package eusurvey.services; 

import java.util.ArrayList; 
import java.util.List; 

import javax.annotation.Resource; 



import org.hibernate.Query; 
import org.hibernate.SQLQuery; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.cfg.Configuration; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 
import org.apache.log4j.Logger; 

import eusurvey.modelA.daos.EncuestaSem; 
import eusurvey.modelA.daos.Encuestado; 
import eusurvey.modelA.daos.Preferencia; 
import eusurvey.tools.ConversionTools; 


@Service("administrationService") 
public class AdministrationService { 
    private static final Logger logger = Logger.getLogger(AdministrationService.class); 

    @Resource(name="sessionFactory") 
    private SessionFactory sessionFactory; 



    @Transactional 
    public void createEncuestado(Encuestado encuestado) throws Exception { 
     Session session = sessionFactory.getCurrentSession(); 



     session.save(encuestado); 
    } 

    @Transactional(readOnly = false) 
    public void createEncuesta(EncuestaSem encuesta) throws Exception { 
     Session session = sessionFactory.getCurrentSession(); 


     logger.info("fecha inicio "+encuesta.getFechaInicio()); 
     session.save(encuesta); 
     logger.info("Grabada encuesta"); 
    } 

    @Transactional(readOnly = false) 
    public void createPreferencia(Preferencia preferencia) throws Exception { 
     Session session = sessionFactory.getCurrentSession(); 



     session.save(preferencia); 
     logger.info("Grabada prefencia"); 
    } 

} 

私はcreatePreferenciaメソッドを呼び出すJavaは

administrationService.createPreferencia(preferencia); 

Consoleサーバー・メッセージはどのようにSQL文を確認することができます

04:46 DEBUG SQL:104 - select hibernate_sequence.nextval from dual 
Hibernate: select hibernate_sequence.nextval from dual 
2016-07-05 14:04:46 DEBUG SequenceGenerator:128 - Sequence identifier generated: BasicHolder[java.lang.Long[1404]] 
2016-07-05 14:04:46 DEBUG AbstractSaveEventListener:131 - Generated identifier: 1404, using strategy: org.hibernate.id.SequenceGenerator 
2016-07-05 14:04:46 INFO AdministrationService:60 - Grabada prefencia 
2016-07-05 14:04:46 INFO ConsultasArielService:213 - despues de commit preferencia 
2016-07-05 14:04:46 DEBUG AbstractTransactionImpl:173 - committing 
2016-07-05 14:04:46 DEBUG JdbcTransaction:113 - committed JDBC Connection 
2016-07-05 14:04:46 DEBUG JdbcTransaction:126 - re-enabling autocommit 
2016-07-05 14:04:46 DEBUG LogicalConnectionImpl:314 - Releasing JDBC connection 
2016-07-05 14:04:46 DEBUG LogicalConnectionImpl:332 - Released JDBC connection 
2016-07-05 14:04:46 DEBUG ConnectionProxyHandler:219 - HHH000163: Logical connection releasing its physical connection 
2016-07-05 14:04:46 DEBUG ConnectionProxyHandler:219 - HHH000163: Logical connection releasing its physical connection 
2016-07-05 14:04:46 DEBUG ConnectionProxyHandler:219 - HHH000163: Logical connection releasing its physical connection 
2016-07-05 14:04:46 DEBUG ConnectionProxyHandler:219 - HHH000163: Logical connection releasing its physical connection 
2016-07-05 14:04:46 INFO EncuestaController:92 - EncuestaControler despues de grabas encuesta 

ありますか?あなたが<tx:annotation-driven/> を使用する場合は

+0

出力SQLを取得したり、設定を有効にするために 'org.hibernate.SQL'にTRACEレベルのログを有効にするだけです。' hibernate.show_sql = true'を有効にしてください。さらに、データベース接続設定が正しいこと、およびデータベース参照ツールで検査しているのと同じデータベースを使用していることを確認します。 – Naros

+0

私はすでにhibernate.show_sql = trueを持っています。私は他のSQLを見ることができます。しかし、私はsession.save(preferencia)sqlが表示されません。この命令はSQL命令を生成しますか? – user3712581

+0

'insert'文を生成するはずです。私はシーケンス識別子があなたのログにpingされているのを見ますが、 '@ Transactional'によって生成されたトランザクションによって現在のセッションが束縛されていないかのように動作します。 grinsについては、 '@ Transactional'アノテーションを削除し、あなたのメソッドの中であなたのコードを' session.getTransaction()。begin();で囲みます。/*あなたのものをする* /; session.getTransaction()。commit(); 'それがうまくいけば、' SessionFactory'とトランザクション管理アノテーションの間のトランザクション境界配線問題です。 – Naros

答えて

0

あなたはこのようトランザクションマネージャーを定義する必要があります。

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="mySessionFactory" /> 
</bean> 

idはtxManagerでなければならない、そうでなければ、このようなトランザクションマネージャーのための特別なIDを定義する必要があります。

<tx:annotation-driven transaction-manager="myTxManager" /> 

そして、@Transactional(propagation = Propagation.REQUIRED,readOnly = false)のようなコードを変更する必要があります。 Propagationを定義しなかった場合、デフォルト値はSUPPORTSです。トランザクションが外部にない場合、コードはトランザクションで実行されます。したがって、トランザクションは開始せず、トランザクションはコミットしません。 すべて使用するだけで@Transactional(propagation = Propagation.REQUIRED,readOnly = false)