Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 更新JPA实体失败,返回空值_Mysql_Hibernate_Jpa_Jboss_Entity - Fatal编程技术网

Mysql 更新JPA实体失败,返回空值

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

我正在使用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(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]上,实际上就是这样。废话。非常感谢。