gpt4 book ai didi

java - 使用 JPA 注释表达审核功能

转载 作者:行者123 更新时间:2023-12-01 04:32:40 24 4
gpt4 key购买 nike

我正在摸索 JPA。到目前为止,我已经成功创建了一个代表用户数据的实体和一个用于访问用户数据的无状态 bean。

用户可以处理的数据如下( SQLFiddle link ):

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 字段将填充用户的电子邮件。这样,每个用户都可以更改他们的数据副本。合并是以后的问题,而不是我的问题的一部分。

现在,我已经有了实体。我创建了一个无状态 bean 来使用 EntityManager 加载/保存/查找数据记录。首先加载用户特定版本,然后如果用户没有用户特定版本则加载未更改的版本的逻辑仍然让我困惑。

考虑 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();
}

...
}

如何将用户信息注入(inject)到此类中?我需要首先获取当前用户的数据,然后如果没有特定于用户的数据可用,则获取所有用户的数据。

最佳答案

您可以使用标准 EJB 身份验证。然后您可以在 session bean 中调用 SessionContext.getCallerPrincipal() 来获取用户 ID。使用此用户 ID 查询数据库。

在这种情况下,如果身份验证用户 ID 不等于电子邮件地址,则必须向表中添加另一列(包含用户 ID)。

更简单(但不太优雅)的方法是将电子邮件地址添加到 EJB 服务方法的参数中:只需将其作为公共(public) API 的一部分即可。

关于java - 使用 JPA 注释表达审核功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17803383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com