【发布时间】:2019-04-08 15:16:39
【问题描述】:
我在使用更新查询更新枚举字段时遇到了一些困难。似乎每当我用新值更新枚举字段时,更新的值不可能匹配新查询。更新查询适用于其他数据类型,但不适用于枚举。
我已尝试关闭 EntityManager、EntityManagerFactory、应用程序,但由于某种原因,无法在新状态下匹配该字段。
下面是我正在使用的测试,其中“db”实例只是一个处理 EntityManager 的实例化、关闭和事务的类。
@Test
public void test() {
db.execute(em -> em.createQuery("UPDATE Atmosphere SET setting = :setting WHERE id=:id", Atmosphere.class)
.setParameter("setting", Atmosphere.Setting.coast)
.setParameter("id", atmosphere1.getId()).executeUpdate());
List<Atmosphere> results = db.retrieve(em -> em.createQuery("SELECT FROM Atmosphere WHERE id = :id", Atmosphere.class)
.setParameter("id", atmosphere1).getResultList());
assertFalse(results.isEmpty()); // passes
assertEquals(Atmosphere.Setting.coast, results.get(0).getSetting()); // passes, the record is updated!
results = db.retrieve(em -> em.createQuery("SELECT FROM Atmosphere WHERE setting = :setting", Atmosphere.class)
.setParameter("setting", Atmosphere.Setting.coast)
.getResultList());
assertFalse(results.isEmpty()); // fails, no results!
}
我也在资源管理器工具中检查了该行,可以看到它已更新,但我仍然无法查询。
似乎唯一可行的方法是使用 EntityManager.merge() 更新记录。
编辑:原来只有在实体的枚举字段上使用@Enumerated(EnumType.STRING) 时才会出现问题。删除它可以解决问题(在 objectdb 2.7.6 中)。
【问题讨论】: