Oracle将空字符串转换为null,但JPA不会相应地更新实体缓存

时间:2009-03-17 09:28:15

标签: java oracle jpa java-ee

众所周知,Oracle将空字符串视为空。

但是,由于JPA的缓存导致了这种行为,我遇到了问题。

首先,我坚持使用JPA(Toplink Essentials)一个实体,它将一个空字符串作为一个字段。 Oracle在存储它时将此值转换为null。

但是,当我获取实体时,JPA似乎从缓存中返回它,此字段仍为空字符串。 JPA似乎不知道,存储到数据库中的内容实际上是一个空值,而这种不连续性会导致问题。

有没有办法在JPA或应用程序服务器(Oracle AS)配置级别上解决此问题?这个我不想在应用程序级别修复的东西(但如果有必要的话会这样做)。

2 个答案:

答案 0 :(得分:2)

我们已迁移到EclipseLink,它支持@ReturnInsert和@ReturnUpdate注释。这些有助于使用实际存储到数据库中的值刷新字段。

答案 1 :(得分:-2)

我认为问题在于Oracle不会将字符串存储为空值,而是将其存储为“未设置”值(让我们将其称为超级null)。因此,如果您尝试选择null值,则不会检索该项,因为它未设置且不为null。您是否尝试过专门插入null而不是空字符串?

我曾经有过一个项目 - 我有一个类似的问题,其中解决方案是将数据库列专门存储为null而不是string.empty,因为它被视为未设置而不是null ...