问题描述
- hibernate save方法出错
-
对应的代码:public void saveAService(Services service) { // TODO Auto-generated method stub svcMngDao.save(service); }
@Id @Column(name="ID") @GeneratedValue(strategy=GenerationType.TABLE, generator="TableGen") @TableGenerator(name="TableGen", table="ID_GEN", pkColumnName="KEYID", valueColumnName="KEYVALUE", pkColumnValue="SERVICE_ID", allocationSize=1) public Integer getId(){ return id; }
出错前控制台信息:
Hibernate: select tbl.KEYVALUE from ID_GEN tbl where tbl.KEYID=? for update
1430097341147|6|statement|connection 30|select tbl.KEYVALUE from ID_GEN tbl where tbl.KEYID=? for update|select tbl.KEYVALUE from ID_GEN tbl where tbl.KEYID='SERVICE_ID' for update
Hibernate: update ID_GEN set KEYVALUE=? where KEYVALUE=? and KEYID=?
1430097341155|4|statement|connection 30|update ID_GEN set KEYVALUE=? where KEYVALUE=? and KEYID=?|update ID_GEN set KEYVALUE=5 where KEYVALUE=4 and KEYID='SERVICE_ID'
1430097341158|2|commit|connection 30||
Hibernate: insert into SERVICES (SERVICE_HOST, SERVICE_NAME, SERVICE_STATE, ID) values (?, ?, ?, ?)
1430101036539|11|statement|connection 28|insert into SERVICES (SERVICE_HOST, SERVICE_NAME, SERVICE_STATE, ID) values (?, ?, ?, ?)|insert into SERVICES (SERVICE_HOST, SERVICE_NAME, SERVICE_STATE, ID) values ('192.168.0.1', 'ActiveX Installer', 'started', 4)
1430101036563|1|rollback|connection 28||出错时控制台信息:
四月 27, 2015 10:17:16 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [dispatcherServlet] in context with path [/PodCloud] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement] with root cause
java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图不存在at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205) at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449) at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350)
解决方案
主要是看你的映射和数据库表是否一致。包括了不可空字段、字段名、字段类型、文本字段的长度等等。
解决方案二:
看看是不是表名写错了
解决方案三:
你只是save报错还是别的都报错,主要是你没有给我们看报错的那段换,你可以试下delete方法,有可能是你的映射和数据库配置有个东西写错,特别是字段,很容易写错,最好是复制粘贴,我以前初学就遇到过很多这个问题,我建议你写xml格式,注解会让类看着很臃肿,当然这是个人见解