在公司封装的平台上使用hibernate更新数据库表(日志表中的登陆用户和ip)时,
一开始使用触发器,
后来直接调用entitymanager,使用executeUpdate()方法,依次遇到如下异常并做了解决。
①ora-04091s
在oracle中执行dml语句时候是需要显示进行提交操作的。当我们进行插入的时候,会触发触发器执行对触发器作用和扩展表的种种操作,但是这个时候触发器和插入语句是在
同一个事务管理
中的,因此在插入语句没有被提交的情况下,我们无法对触发器作用表进行其他额外的操作,如果执行其他额外的操作则会抛出如上的异常。
②org.hibernate.hql.ast.querysyntaxexception
这个异常有三种可能
1.持久类写错了,要不就是写成了数据库表名。
我就是第一种错误啊
2 hibernate3.0不支持select中嵌套查询,据说from也不行只支持where中嵌套查询,而3.1支持了select中嵌套查询
3 sql语句中字段是用了保留关键字。
③javax.persistence.TransactionRequiredException: Executing an update/delete query
在执行删和改操作的时候必须要进行事务的配置。
如下:
@Resource
private UserTransaction utx
try{
utx.begin()
........//执行删和改的操作。
utx.commit();
}
catch(Exception e){
utx.rollback
}