小编And*_*ija的帖子

Hibernate/JPA:只有一个条目可以有特定的字段值

我需要一些看起来不太具体的东西,但无论如何我无法想出漂亮而复杂的解决方案。

假设我有非常简单的 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;
}
Run Code Online (Sandbox Code Playgroud)

我需要的是以某种方式注释defaultType字段,以便只有(并且恰好)一个持久化实体将此值设为 true。当新实体以这个defaultType为真被持久化时,旧实体(defaultType = true)必须被改变并且它的defaultType值更改为 false。此外,如果任何实体发生更改(其defaultType更改为 true),则应应用相同的规则。

据我所知,这可以在业务逻辑内部(例如在 DAO 层)、数据库触发器或休眠拦截器或事件(如果有另一种方式,请告诉我)来实现。我尝试过 DAO 解决方案,但这是一种糟糕的解决方案,因为它可以被绕过,而且对于这样简单的操作来说真的很笨拙。数据库触发器不能与 hibernate/jpa 注释一起添加(如果我没记错的话),我不确定如何使用 hibernate 拦截器/事件来实现这个功能。

那么,这个问题的最佳解决方案是什么?

java hibernate jpa jdbc jakarta-ee

5
推荐指数
1
解决办法
1494
查看次数

标签 统计

hibernate ×1

jakarta-ee ×1

java ×1

jdbc ×1

jpa ×1