gpt4 book ai didi

java - 如何将 AND 或 OR 与 JPAContainer 一起使用?

转载 作者:行者123 更新时间:2023-12-01 23:05:40 25 4
gpt4 key购买 nike

我正在寻找如何使用子句 AND 或 OR 在我的应用程序中进行登录。对于 SQL,我使用“SELECT * FROM person WHERE email = ? AND password = ?”,但对于 JPAContainer,我不知道如何执行此操作。

//Beans
@Entity
public class Person {
@Id
@GeneratedValue
private Integer id;

@NotNull
@Size(min=5, max=50)
private String name;

@Email
private Email email;

@Size(min=8,max=8)
private String password;

@ManyToOne
private PersonType personType;
}

@Entity
public class PersonType {
@Id
@GeneratedValue
private Integer id;

@NotNull
@Size(min=5, max=50)
private String personType;
}

如何使用 JPAContainer 检查人员的电子邮件和密码并返回列表?

最佳答案

如果我理解正确,您希望通过检查电子邮件密码字段来验证登录。我不确定为什么您需要 JPAContainer 而不是简单的 CriteriaQuery,但这是您问题的答案(我突然想到):

JPAContainer<Person> container = 
JPAContainerFactory.<Person>makeReadOnly(Person.class, entityManager);

container.addContainerFilter(new Compare.Equal("email", emailInput));
container.addContainerFilter(new Compare.Equal("password", passwordInput));

// Query container size, eg
if(container.size()==1) { ... }

如果以这种方式添加多个容器过滤器,它们将隐式地被理解为它们的交集,即。和。

如果你想要过滤器的并集,即。或者,您必须自己构建它(如果这有意义,则由您自行决定):

Filter filter = new Compare.OR(new Compare.Equal("email", emailInput), new Compare.Equal("password", passwordInput));
container.addContainerFilter(filter);

但是,我会重申,使用简单的 CriteriaQuery 可能更合适。

<小时/>

此外,不要掉以轻心,从您的 Person 实体来看,我推断您将密码以明文形式存储在数据库中,这是一个很大的禁忌,并且

  1. 如果数据库遭到破坏,您的用户可能会面临风险,并且
  2. 如果您的代码经过审核/审查,可能会对您自己的声誉造成严重打击。
<小时/>

编辑:

使用 CriteriaQuery,您可以执行以下操作:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> q = qb.createQuery(Long.class);
Root<Person> root = q.from(Person.class);
Path<String> email = root.get("email");
Path<String> password = root.get("password");

cq.select(cb.count(root)).where(
cb.and(
cb.equal(email, emailInput),
cb.equal(password, passwordInput)
)
);

return entityManager.createQuery(cq).getSingleResult();

如果您愿意,请将 cb.and(...) 替换为 cb.or(...)。 HTH。

关于java - 如何将 AND 或 OR 与 JPAContainer 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795531/

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