kas*_*ere 5 java jpa entitymanager joincolumn
我有一个Login实体和一个Customer实体.Login.username是customer表中的外键.因此Java CustomerPOJO中的以下行
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = false)
private Login login;
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有一种简单的方法来查询customer表使用username?还是必须我第一次取login的username,然后customer用login?
这是JPA条件查询.而且,是的,我更愿意使用条件查询.
public Customer getCustomerByUsername(String username) throws EntityNotFoundException {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Customer> criteriaQuery = criteriaBuilder.createQuery(Customer.class);
Root<Customer> root = criteriaQuery.from(Customer.class);
Path<String> path = root.<String>get("username");
criteriaQuery.where(criteriaBuilder.equal(path, username));
return entityManager.createQuery(criteriaQuery).getSingleResult();
}
Run Code Online (Sandbox Code Playgroud)
这条线Path<String> path = root.<String>get("username")正在抛出一个例外username ... is not present.
使用JPQL的正确解决方案是
Query q = entityManager.createQuery("SELECT c FROM Customer c WHERE c.login.username = :username");
q.setParameter("username", username);
return (Customer) q.getSingleResult();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11072 次 |
| 最近记录: |