我正在摸索JPA。到目前为止,我已经成功地创建了一个表示用户数据的实体和一个用于访问用户数据的无状态 bean。
用户可以处理的数据是这样的(SQLFiddle 链接):
CREATE TABLE data
(
email character varying(128) NOT NULL,
data character varying(128) NOT NULL,
lastchange timestamp NOT NULL,
CONSTRAINT email_data PRIMARY KEY (email,data)
);
这个想法是使用空email
密钥为所有用户保存未更改的当前版本。然后,当用户更改数据并创建可审核版本时,该email
字段将填充用户电子邮件。这样,每个用户都可以更改他们的数据副本。合并是以后的问题,而不是我的问题的一部分。
现在,我已经有了实体。我使用 EntityManager 创建了一个无状态 bean 来加载/保存/查找数据记录。首先加载用户特定版本,然后在用户没有用户特定版本时加载未更改版本的逻辑仍然让我难以理解。
考虑 bean 的这一部分:
@Stateless
public class DataBean {
@PersistenceContext(unitName = "authPU")
private EntityManager em;
public List<DataEntry> findAll() {
TypedQuery<DataEntry> query = em.createQuery("SELECT d FROM data d", DataEntry.class);
List<DataEntry> list = query.getResultList();
return query.getResultList();
}
...
}
如何将用户信息注入此类?我需要先获取当前用户的数据,如果没有可用的用户特定数据,则获取所有用户的数据。