我有两张桌子' account_pools'和'帐户' ,基本上看起来像这样
CREATE TABLE account_pools (
pool_id bigint PRIMARY KEY
);
CREATE TABLE accounts (
id bigint PRIMARY KEY,
pool_id bigint NOT NULL,
deleted boolean NOT NULL DEFAULT false,
username text NOT NULL,
FOREIGN KEY pool_id REFERENCES account_pools(pool_id)
);
'帐户'表是历史记录,因此当用户编辑帐户时,当前行/版本标记为" deleted = true"并插入包含用户更改的新行。
应用程序层不需要了解历史记录,因此我希望我的AccountPool实体仅获取未删除的帐户;与
相似的东西@Entity
public class AccountPool {
//...stuff
@OneToMany
@MAGIC_ANNOTATION( restriction = "deleted=false" )
private List<Account> accounts;
}
到目前为止,我提出了可能的解决方案:
解决方案1.)有效,但违反了JPA API合同
解决方案2.)工作但非常容易出错=每当有人添加一个从数据库中提取AccountPool实例的新方法但是忘记之后手动填充&#39;帐户集合时会中断
我错过了什么吗?
答案 0 :(得分:4)
是的,您可以使用非JPA,Hibernate特定的 06:47 $ sdk version
==== INTERNET NOT REACHABLE! ===============================
Some functionality is disabled or only partially available.
If this persists, please enable the offline mode:
$ sdk offline
============================================================
SDKMAN 4.0.35
注释来过滤集合。
见2.4.6.1节
https://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/
@Where
或者,对于符合JPA的解决方案,您可以创建一个数据库视图,用于过滤已删除的项目并将@Entity
public class AccountPool {
@OneToMany
@Where( clause = "deleted='false'" )
private List<Account> accounts;
}
实体映射到该视图。