我无法在读取端处理持久性异常。
我正在与Lagom一起实施CQRS。我正在处理JPA readside上的事件。由于唯一键约束冲突,我的操作失败。我添加了一个try catch来处理此问题,但它从未被调用。
try {
entityManager.persist(entity);
} catch (RuntimeException re) {
log.error("Failed to persist entity with name: {}", entity.getName());
}
当发生唯一键冲突时,我希望看到日志“无法持久保存具有名称的实体...”,但我看到以下错误:
2019-04-28 10:47:27,645 WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 23505
2019-04-28 10:47:27,645 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ERROR: duplicate key value violates unique constraint "entity_pkey"
Detail: Key (id)=(eac09c0e-5d4a-35cf-b956-2a7734cb40e5) already exists.
Location: File: nbtinsert.c, Routine: _bt_check_unique, Line: 434
Server SQLState: 23505
在Lagom CQRS ReadSide处理器中是否存在关于错误/异常处理的缺失?
我还添加了以下支票:
final Entity persistedEntity = entityManager.find(Entity.class, entity.getId());
if(persistedEntity == null) {
entityManager.persist(entity);
} else {
log.info("Entity {} already exists", entity.getName());
}
但是它不起作用。我仍然从休眠类中收到唯一键冲突错误。