Je travaille avec Spring MVC 3.2.6, Hibernate 4, Oracle et Weblogic 10.3.6SessionFactory Hibernate ne commit pas la base de données Oracle
Je veux engager dans la base de données Oracle en utilisant une entité Hibernate et JPA. Dans la console du serveur, je ne vois pas d'erreurs. Mais lorsque je vérifie la table Oracle, les nouveaux enregistrements ne sont pas enregistrés.
Ceci est mon entité JPA
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;
}
}
classe de service AdministrationService.java.I utilisent la méthode createPreferencia.
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");
}
}
Java où j'appelle la méthode createPreferencia est
administrationService.createPreferencia(preferencia);
messages serveur Console sont
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
Comment puis-je vérifier phrase SQL?
Activez simplement la journalisation du niveau TRACE pour 'org.hibernate.SQL' afin d'obtenir la sortie SQL ou activez le paramètre de configuration' hibernate.show_sql = true'. En outre, vérifiez que les paramètres de connexion de votre base de données sont corrects et que vous utilisez la même base de données que vous inspectez dans votre outil de navigation de base de données. – Naros
J'ai déjà hibernate.show_sql = true. Je peux voir d'autres sql. Mais je ne vois pas session.save (preferencia) sql ,. Cette instruction génère-t-elle une instruction SQL? – user3712581
Il devrait générer une instruction 'insert', oui. Je vois que l'identifiant de séquence est ping dans vos logs mais il se comporte comme si la session en cours n'était pas limitée par la transaction générée par '@ Transactional'. Pour les grins, supprimez l'annotation '@ Transactional' et enveloppez votre code dans votre méthode avec' session.getTransaction(). Begin();/* fais tes trucs * /; session.getTransaction(). commit(); 'Si cela fonctionne, c'est un problème de câblage de limite de transaction entre' SessionFactory' et vos annotations de gestion des transactions. – Naros