在我们的应用程序中,我是另一个系统的客人,我不想做出任何具有大规模后果的改变。
我正在从头开始编写单元测试,因为之前的作者没有打扰。(抱怨。)我正在尝试插入一行以使用 JPA/hibernate 测试我的查询,但很惊讶我收到以下错误:
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: integrity constraint violation: NOT NULL check constraint; SYS_CT_14316 table: OPTIONVALUE column: OPTION_INDEX
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1377)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1300)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1306)
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:989)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:293)
at com.sun.proxy.$Proxy109.flush(Unknown Source)
尤其是当我知道我已经设置了值时,因为我必须为它编写一个 setter。然后,在其中一个对象上,我找到了以下定义(我必须查找):
public static final String OPTION_VALUE_POSITION_COLUMN = "option_index";
@Column(name = OPTION_VALUE_POSITION_COLUMN, insertable = false, updatable = false, nullable = false)
private int position;
这就解释了为什么我在该列上仍然为空。
我在删除 insertable 时没有什么大问题,因为它不是自动生成的,所以如果你要插入一条记录,为什么你不想包含它,这显然不会在系统内部发生。并且可更新将保护它。但如果我不需要,我真的不想。
所以,我的问题是,有没有办法只为单元测试覆盖它。我尝试在谷歌上搜索几件事,但为此措辞有点问题,我什么也没找到。