在我的Hibernate Application中有一个字段Active
,它是布尔类型。
我的Hibernate Bean类列
@Column(name = "ACTIVE")
@Type(type = "org.hibernate.type.YesNoType")
private boolean active;
//Setter and getter methods
在我的服务类写代码中......
public void createUser(UserVO userVO) throws Exception {
--------
userVO.setActive(false);//setting false..
----
------//Database insert Code hear..
}
但是我得到了Exception听到......
Caused by: java.sql.BatchUpdateException: Incorrect integer value: 'N' for column 'ACTIVE' at row 1
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2045)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1468)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
... 50 more
Caused by: java.sql.SQLException: Incorrect integer value: 'N' for column 'ACTIVE' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2683)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2144)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2444)
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1997)
... 53 more
答案 0 :(得分:0)
org.hibernate.type.YesNoType
将布尔值映射到JDBC CHAR类型为('N'|'n')= false,('Y'|'y' )= true
因此表列类型(tinyint)不适合保存您的值。使它成为char或varchar。
答案 1 :(得分:0)
这里的问题是两个解决方案,
1,如果ACTIVE列类型为{tinyint},则应在代码中使用短号 例如。
userVO.setActive(Short.valueOf("0"));
2,如果您必须在代码中使用布尔类型,请change the type of ACTIVE column to {char}