【发布时间】:2016-03-14 00:25:49
【问题描述】:
我需要一些看起来不那么具体的东西,但无论如何我无法想出好的和复杂的解决方案。
假设我有非常简单的 hibernate/jpa 实体:
@Entity(name="entity")
public class Type {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(unique = true, nullable = false)
private String name;
@Column(unique = false, nullable = false)
private boolean defaultType;
}
我需要以某种方式注释 defaultType 字段,以便只有(并且完全)一个持久化实体将此值设为 true。当新实体将此 defaultType 保持为 true 时,必须更改旧实体(具有 defaultType=true)及其 defaultType 值改为假。此外,如果任何实体发生更改(其 defaultType 更改为 true),则应适用相同的规则。
据我所知,这可以在业务逻辑内部(例如在 DAO 层)、使用 DB 触发器或使用休眠拦截器或事件来实现(如果有其他方法,请告诉我)。我尝试使用 DAO 解决方案,但这是一种糟糕的解决方案,因为它可以被绕过,而且对于这种简单的操作来说真的很笨拙。数据库触发器不能用 hibernate/jpa 注释添加(如果我没记错的话),我不知道如何使用 hibernate 拦截器/事件来实现这个功能。
那么,这个问题的最佳解决方案是什么?
【问题讨论】:
-
已回答,但我想补充一点:想要在数据库中有约束是有充分理由的;那么无论数据如何最终进入数据库,数据都会受到保护。如果从 JPA 的角度来解决这个问题,那么守卫只有在使用 JPA 时才到位。只是一个想法,我不知道你的环境、当前的要求或未来的要求。
标签: java hibernate jpa jakarta-ee jdbc