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格式,注解会让类看着很臃肿,当然这是个人见解