我有一个Java程序,它使用Hibernate与MySQL DB交互,有两个表,User和Status。
因为我只有User Table,所以一切正常,但现在我添加了Status表,现在我在插入testdata时遇到以下异常,但是现在对于这两个表虽然我没有更改User表中的任何内容:
Could not update entity of typ User
Aug 12, 2016 11:37:01 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1364, SQLState: HY000
Aug 12, 2016 11:37:01 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Field 'status_statusId' doesn't have a default value
Aug 12, 2016 11:37:01 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
Could not update entity of typ Status
Aug 12, 2016 11:37:01 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 1364, SQLState: HY000
Aug 12, 2016 11:37:01 AM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Field 'user_email' doesn't have a default value
Aug 12, 2016 11:37:01 AM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
以下是带有注释和变量的实体类的摘录:
用户:
@Entity
@Table(name = "user")
public class User implements Serializable {
@PrePersist
void preInsert() {
email = "test@testmail.com";
}
@Id
@Column(name = "user_email")
private String email;
状态:
@Entity
@Table(name = "status")
public class Status implements Serializable {
@PrePersist
void preInsert() {
statusId = "A01A001";
}
@Id
@Column(name = "status_statusId")
private String statusId;
对我来说看起来像某种NOT NULL问题,但我使用了@PrePersist注释来确保两个实体都有默认值。
我搜索了一些解决方案,其中没有一个工作,就像这一个:mysql error 1364 Field doesn't have a default values
他们建议更改mysql设置并删除my.cnf中的STRICT_TRANS_TABLES。但我找不到这个文件所以我尝试了phpmyadmin解决方案。 他们说你应该在那里编辑sql模式变量并删除STRICT_TRANS_TABLES值,但是当我尝试编辑这个变量时它没有值:
有人知道另一个解决方案吗?非常感谢每一个有用的答案。