在mysql数据库中使用tinyint列的Hibernate句柄?

时间:2013-03-22 05:19:28

标签: java mysql spring hibernate

在我的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

2 个答案:

答案 0 :(得分:0)

来自hibernate types docs

  

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}

祝你好运!