休眠处理 nullable=true 在 @Column
我正在使用Hibernate和由Mysql db支持的Springs。
这是类似于我用来制作条目的实体
@Entity
@Table(name = "my_table") {
@Basic
@Column(name = "my_string", nullable = false)
private String myString;
}
sql 的定义是
CREATE TABLE `my_table` (
`my_string` varchar(200) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
尽管该表允许空值,但根据 JPA 注释,myString 列是不可为空的。这导致了不可预测的行为。
问:在进行插入时,是否始终在实体级别强制执行不可为空的值?或者在某些情况下,它可能被忽略
我的期望是,所有的参赛作品都应该被拒绝。但是通过此设置,许多条目(>7000)已进入表中。只有有时我从春天得到一个DataIntegrityViolation异常
org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value: ...; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ....
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:652)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:104)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:403)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58)
....
....
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: ....
at org.hibernate.engine.internal.Nullability.checkNullability(Nullability.java:103)
....
我知道在实体和表中使用单独的签名是一种不好的做法,但是我试图找出导致这种行为的原因以及可能因此而被遗漏的任何其他漏洞。
Versions -
Mysql- 5.5
Hibernate - 4.0.0
Hibernate-jpa - 2.0
Spring-core- 3.1.0
Spring-jdbc- 3.1.2