SessionFactory Hibernate不';不提交Oracle数据库
我使用SpringMVC3.2.6、Hibernate4、Oracle和WebLogic10.3.6 我想使用Hibernate和JPA在Oracle数据库中提交一个实体。在服务器控制台中,我没有看到错误。但当我检查Oracle表时,不会记录新记录 这是我的JPA实体SessionFactory Hibernate不';不提交Oracle数据库,oracle,hibernate,sessionfactory,Oracle,Hibernate,Sessionfactory,我使用SpringMVC3.2.6、Hibernate4、Oracle和WebLogic10.3.6 我想使用Hibernate和JPA在Oracle数据库中提交一个实体。在服务器控制台中,我没有看到错误。但当我检查Oracle表时,不会记录新记录 这是我的JPA实体 package eusurvey.modelA.daos; import java.io.Serializable; import javax.persistence.*; /** * The persistent cla
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;
}
}
我使用方法createPreferenceia
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);
控制台服务器消息是
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
如何检查SQL语句?如果使用
您必须这样定义transactionManager:
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
id必须是txManager,否则您应该像这样为transactionManager定义特殊id
<tx:annotation-driven transaction-manager="myTxManager" />
您应该像这样更改代码@Transactional(propagation=propagation.REQUIRED,readOnly=false)
。
如果未定义传播
,默认值为支持
,如果外部没有事务,代码将在事务中执行。因此,没有事务开始,也没有事务提交。
总之,如果您使用
您必须这样定义transactionManager:
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="mySessionFactory" />
</bean>
id必须是txManager,否则您应该像这样为transactionManager定义特殊id
<tx:annotation-driven transaction-manager="myTxManager" />
您应该像这样更改代码@Transactional(propagation=propagation.REQUIRED,readOnly=false)
。
如果未定义传播
,默认值为支持
,如果外部没有事务,代码将在事务中执行。因此,没有事务开始,也没有事务提交。
总之,只需使用
@Transactional(propagation=propagation.REQUIRED,readOnly=false)
只需为org.hibernate.SQL
启用跟踪级别日志,即可获取输出SQL或启用配置设置hibernate.show\u SQL=true
。此外,请验证您的数据库连接设置是否正确,以及您使用的数据库是否与在数据库浏览工具中检查的数据库相同。我已经休眠了。show_sql=true。我可以看到其他人。但是我没有看到session.save(preferencia)sql,。此指令是否生成SQL指令?它应该生成insert
语句,是。我在日志中看到序列标识符正在ping,但它的行为似乎当前会话不受@Transactional
生成的事务的限制。对于GRIN,请删除@Transactional
注释,并使用session.getTransaction().begin();/*做你的事*/;session.getTransaction().commit()
如果这样做有效,那就是SessionFactory
和事务管理注释之间的事务边界连接问题。我必须修改一个旧项目,它不使用session.getTransaction。它在hibernate-context.xml中定义了一个transactionManager。现在我在家里,没有SpringXML项目,我没有。这可能是错误吗?只需为org.hibernate.SQL
启用跟踪级别日志记录,即可获取输出SQL或启用配置设置hibernate.show\u SQL=true
。此外,请验证您的数据库连接设置是否正确,以及您使用的数据库是否与在数据库浏览工具中检查的数据库相同。我已经休眠了。show_sql=true。我可以看到其他人。但是我没有看到session.save(preferencia)sql,。此指令是否生成SQL指令?它应该生成insert
语句,是。我在日志中看到序列标识符正在ping,但它的行为似乎当前会话不受@Transactional
生成的事务的限制。对于GRIN,请删除@Transactional
注释,并使用session.getTransaction().begin();/*做你的事*/;session.getTransaction().commit()
如果这样做有效,那就是SessionFactory
和事务管理注释之间的事务边界连接问题。我必须修改一个旧项目,它不使用session.getTransaction。它在hibernate-context.xml中定义了一个transactionManager。现在我在家里,没有SpringXML项目,我没有。这可能是错误吗?