在我们的领域模型中, 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
-- 整个结果集都失败了。
我实施的解决方法:将关系注释为@OneToMany
但Notification
通过getter返回一个:
@OneToMany(mappedBy = "event")
List<Notification> notifications;
...
public Notification getNotification() {
return notifications == null || notifications.isEmpty()
? null : notifications.get(0);
}
它工作得很好,但我不喜欢这里的豆类风格被打破了。我的问题:是否有 Hibernate 偏好来抑制提到的异常,所以我可以在没有自定义 getter 的情况下进行管理?
数据库由外部系统管理和填充,因此无法添加约束或控制重复项的插入。