添加額外的JOIN約束我有兩個表「account_pools」和「賬戶」,基本上是這樣看JPA:可以對@OneToMany
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)
);
「帳戶」表作爲歷史,因此用戶編輯時,一個帳戶,當前行/版本標記爲「已刪除= true」,並插入一個包含用戶更改的新行。
應用程序層不需要知道歷史記錄,所以我希望我的AccountPool實體到只有獲取未被刪除的帳戶;類似
@Entity
public class AccountPool {
//...stuff
@OneToMany
@MAGIC_ANNOTATION(restriction = "deleted=false")
private List<Account> accounts;
}
可能的解決方案的東西,我想出了迄今:
- 使用@PostLoad填充「帳戶」集合,這個工程使用Hibernate作爲JPA提供者時,卻違反了JPA API 合同中規定的實體監聽器/回調不得調用 EntityManager的方法(見 https://docs.jboss.org/hibernate/orm/4.0/hem/en-US/html/listeners.html)
- 選中「帳戶」字段作爲@Transient和手動換我所有的方法是取AccountPool實例從數據庫中 明確填充「帳戶」集合之後
解決方案1)工作,但違反了合同JPA
的API解決方案2)的作品,但確實是容易出錯=休息每當有人補充說一種從數據庫中提取AccountPool實例但忘記手動填充「賬戶集合」之後的新方法
我錯過了什麼嗎?
順便說一句,我使用的JDK8,JPA 2.1和休眠5.1 – user2737142