有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

然而,我有一个问题,因为这种行为由于JPA的缓存

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

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

有没有办法在JPA或应用服务器(Oracle AS)配置级别上解决这个问题?这是我不想在应用程序级别解决的问题(但如果有必要,我会这么做)


共 (2) 个答案

  1. # 1 楼答案

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

    我曾经有过一个项目,在那里我遇到了一个类似的问题,解决方案是在数据库列中专门存储null,而不是字符串。空,因为它被视为未设置且不为空

  2. # 2 楼答案

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