2013-03-04 125 views
0

有Hibernate和MSSQL env。我遇到了错误: '无法将值NULL插入列'comment_id',表'CHT.dbo.reporter_comments';列不允许有空值。 INSERT失败。' Hibernate配置:Hibernate + MSSQL,无法将值NULL插入列

<id unsaved-value = "null" type = "int" name="commentId" column="comment_id"> 
    <generator class="identity"/> 
</id> 

    <property name="reporterId" column="REPORTERID" /> 
    <property name="adminComments" column="COMMENT" /> 
    <property name="commentDate" column="COMMENT_DATE"/> 
    <property name="commentBy" column="COMMENT_BY"/> 

'COMMENT_ID' 列在DB '身份' 属性:如果我做的使用数据库客户端插入:

insert into REPORTER_COMMENTS (REPORTERID, COMMENT, COMMENT_DATE, COMMENT_BY) 
values (15119, 'test', '2013-03-04 05:45:25', 'admin'); 

它的工作非常适合我。

Hibernate的日志:

DEBUG hibernate.SQL - insert into REPORTER_COMMENTS (REPORTERID, COMMENT, COMMENT_DATE, COMMENT_BY) values (?, ?, ?, ?) DEBUG hibernate.jdbc.AbstractBatcher - preparing statement DEBUG hibernate.persister.entity.AbstractEntityPersister - Dehydrating entity: [---.ReporterComments#] DEBUG hibernate.type.LongType - binding '15119' to parameter: 1 DEBUG hibernate.type.StringType - binding 'test' to parameter: 2 DEBUG hibernate.type.TimestampType - binding '2013-03-04 06:13:02' to parameter: 3 DEBUG hibernate.type.StringType - binding 'dw' to parameter: 4 DEBUG hibernate.jdbc.AbstractBatcher - about to close PreparedStatement (open PreparedStatements: 1, globally: 1) DEBUG hibernate.jdbc.AbstractBatcher - closing statement DEBUG hibernate.util.JDBCExceptionReporter - could not insert: [---.ReporterComments] [insert into REPORTER_COMMENTS (REPORTERID, COMMENT, COMMENT_DATE, COMMENT_BY) values (?, ?, ?, ?)] java.sql.SQLException: [BEA][SQLServer JDBC Driver][SQLServer]Cannot insert the value NULL into column 'comment_id', table 'CHT.dbo.reporter_comments'; column does not allow nulls. INSERT fails.

谢谢!

+0

由于我想不出任何其他的解释,我需要问,你是否绝对确信你是从数据库客户端连接到Java应用程序的同一个数据库? – 2013-03-04 12:01:25

回答

3

是否您的comment_id列实际上是IDENTITY列?如果不是,那么这就是你的问题,因为Hibernate在使用身份生成器时不会在插入语句中包含comment_id列,而依赖于数据库来生成值。

相关问题