2016-04-25 82 views
0

我无法在此处或在Google上找到答案。休眠+ H2不更新yes_no类型列

我的问题如下:
我有一个实体与YES_NO类型列

public class MyEntity { 

    @Column(name = "IS_DELETED") 
    @Type(type = "yes_no") 
    private Boolean itemDeleted = Boolean.FALSE; 
} 

在数据库中,该列是CHAR(1)

IS_DELETED CHAR(1) CHECK ("IS_DELETED" IN ('Y', 'N')) 

下面的代码构成H2中的问题与我的JUnit测试(在应用程序运行时与Oracle运行良好):

myEntityRepositoryService.save(myEntity); 

所有而非 yes_no类型的列都被正确更新。我启用了一些休眠日志来检查提交是否发生,如果交易已经发布,......一切正常。所有列都更新得很好但不是yes_no列。

我试图在保存之前的代码中的其他字段(如随机数)中设置一些随机值。它工作,值被保存,但不是布尔列。

注意,仓库服务扩展org.springframework.data.jpa.repository.JpaRepository

是否存在与Hibernate的YesNoType一个已知的问题?难道我做错了什么? H2需要一个特殊的配置?

+0

您是否找到答案。我与H2和grails有类似的问题,正在转向生产。数据库重新创建时在内存中正常工作,但在生产中它已更新。 – John

回答

0

问题不是H2。相反,你的JpaRepository可能没有利用Hibernate。请确保它使用Hibernate EntityManager而不是其他一些实现(例如EclipseLink)。

+0

我已经使用Hibernate Entity Manager。我甚至不确定它会否与Oracle合作。但是,感谢您的回答:) – Mannekenpix

+0

作为一个快速测试,你可以取而代之的'@Type(type =“yes_no”)',将itemDeleted从'Boolean'改为'String',然后将其设置为“Y”或“N”查看这些更新是否持续?同时检查没有其他列被命名为“IS_DELETED”,因为这会导致一些问题。 –

+0

字符串字段正确保持,只有布尔型YesNoType有问题。 – Mannekenpix