1

在我们的领域模型中, oneEvent被设计为具有 0 或 one Notification,所以我开始@OneToOne对实体关系使用注解:

class Event {
...
    @OneToOne(mappedBy = "event")
    Notification notification;

Notification在大多数情况下,它可以正常工作,但在极少数情况下,单个 s会出现重复的 s Event,它们在时间戳中仅相差几毫秒。如果发生这种情况,Hibernate 会抛出异常:

javax.persistence.PersistenceException:org.hibernate.HibernateException:发现给定标识符的多行:1290338,对于类:Xxx

-- 整个结果集都失败了。

我实施的解决方法:将关系注释为@OneToManyNotification通过getter返回一个:

@OneToMany(mappedBy = "event")
List<Notification> notifications;
...

public Notification getNotification() {
    return notifications == null || notifications.isEmpty()
           ? null : notifications.get(0);
}

它工作得很好,但我不喜欢这里的豆类风格被打破了。我的问题:是否有 Hibernate 偏好来抑制提到的异常,所以我可以在没有自定义 getter 的情况下进行管理?

数据库由外部系统管理和填充,因此无法添加约束或控制重复项的插入。

4

0 回答 0