hibernate 错误整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/uotail/article/details/84192821

1

2018-09-08 11:35:14


表单中
 <input id="id" name="id" type="hidden" value="${vo.id}">
 传数据到后台变成了id=""
 saveOrUpdate(entity); 报错
 打印出的sql
 Hibernate: 
    update       set    where    ID=?
 错误信息       
 java.lang.RuntimeException: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
    at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:81)
    at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:73)
    at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:57)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3013)
    at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2915)
    at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3244)
    at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:113)
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:276)
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1127)

解决
save(entity)

看sql就知道 因为id为空,所以是应该保存数据,但是空字符串不是null

所以 saveOrUpdate(entity) 会找id为“”的行进行更新,当然找不到,报错呀

对于这类问题不应该首先判断一下id吗 或者直接调用save(entity)

2

 2018-09-08 16:51:26
九月 08, 2018 4:53:08 下午 org.apache.tomcat.util.modeler.BaseModelMBean invoke
严重: Exception invoking method createStandardContext
java.lang.NullPointerException
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:633)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)


   原因
找不到model实体类的get set方法


3 org.hibernate.exception.GenericJDBCException: 无效的列类型

/org/springframework/spring-jdbc/3.1.1.RELEASE/spring-jdbc-3.1.1.RELEASE-sources.jar!/org/springframework/jdbc/core/JdbcTemplate.java
调用它下面的这个方法报错

public int update(String sql, Object... args) throws DataAccessException {
		return update(sql, newArgPreparedStatementSetter(args));
}

“无效的列索引”其实是个低级的错误,原因无非几个:
1、sql串的?号数目和提供的变量数目不一致:
例如:jdbcTemplate.update(sql, new Object[] {newState,oldState});
如果sql里面有1个?号,Object[]送了2个,就会报错。
2、sql串里的?号书写不正确
英文?和中文?有时难以区分。
3、sql串的?号用''括了起来。
例如:sql="UPDATE abc SET abc.name='?' WHERE abc.id='?'";
把''去掉就可以了。
4,遇到这种情况select*from user where   info   like   %?%;  
虽然这是sql的写法,但是在jdbc 中需要改成 select*from user where   info   like   ?;
如ps.setString(“%”+value+“%”);

JdbcTemplate中的这个方法
public int update(String sql, Object... args) throws DataAccessException {
        return update(sql, newArgPreparedStatementSetter(args));
}
因为sql中?出也可以为null
所以会把null赋值给这条sql,但sql中却没有占位符,所以会报错

猜你喜欢

转载自blog.csdn.net/uotail/article/details/84192821