作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找如何使用子句 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
实体来看,我推断您将密码以明文形式存储在数据库中,这是一个很大的禁忌,并且
编辑:
使用 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/
我是一名优秀的程序员,十分优秀!