Mysql 更新JPA实体失败,返回空值
我正在使用JPA(Hibernate)在MySQL 5.0服务器上存储一个实体 以下是简化形式的实体:Mysql 更新JPA实体失败,返回空值,mysql,hibernate,jpa,jboss,entity,Mysql,Hibernate,Jpa,Jboss,Entity,我正在使用JPA(Hibernate)在MySQL 5.0服务器上存储一个实体 以下是简化形式的实体: @Entity @Table(name = "messages") public class Message implements Serializable { @Id @GeneratedValue @Column private long id; @Column private String content; @Column(in
@Entity
@Table(name = "messages")
public class Message implements Serializable
{
@Id
@GeneratedValue
@Column
private long id;
@Column
private String content;
@Column(insertable = false)
private Date read;
@Column(insertable = false)
private Date deleted;
}
表“messages”中的“read”和“deleted”列被定义为可以包含空值。当我第一次尝试持久化其中一个实体时,我遇到了一个异常。显然,Hibernate所做的是在insert语句的列列表中列出“read”和“deleted”列,而不是在值列表中。我用上面看到的@Column注释中的“insertable=false”语句解决了这个问题
然而,现在我有一个更大的问题。我想将读取或日期字段设置为非空值。当我这样做时,我会得到一个类似的异常“您的SQL语法有错误”。他现在所做的是列出update语句where部分的所有字段,包括“read”和“deleted”。他所做的是像“…和read=NULL”这样的检查。在MySQL中,当然应该是“…读取为空”
翻箱倒柜,我已经找到了@Column注释的“updateable”参数。但是,如果我将其设置为false,则“read”和“deleted”都不会更新,所以这也不是我想要的
…帮助?read是一个,并且驱动程序似乎没有用反引号转义名称。我认为最好的解决办法是重命名列。你能粘贴stacktrace吗?我从没听说过这种事。您是否可以尝试将注释
@Temporal(TemporalType.TIMESTAMP)
添加到两列中(同时删除insertable=false);检查与您的MySQL服务器版本对应的手册,在com.MySQL.jdbc.PreparedStatement.executeBatchSerialy(PreparedStatement.java:2020)[:]在com.MySQL.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1451)[:]的第1行中使用接近'read=null,其中id=2'的正确语法在org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:774)[:6.0.0.Final]上,实际上就是这样。废话。非常感谢。