And*_*rey 7 java jpa criteriaquery jpa-2.0
我喜欢类型安全CriteriaQuery带来了JPA 2.0,但它也带来了一些样板代码.例如,假设我有一个名为NamedEntity的实体,它只有一个id和一个名为"name"的String字段(假设它将唯一约束设置为true).以下是NamedEntityManager的外观:
public class NamedEntityManager
{
//inject using your framework
EntityManager entityManager;
//retrieve all existing entities of type NamedEntity from DB
public Iterable<NamedEntity> queryAll()
{
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<NamedEntity> query = builder.createQuery(NamedEntity.class);
return entityManager.createQuery(query).getResultList();
}
//retrieve a single entity of type NamedEntity from DB using specified name
public NamedEntity queryByName(String name)
{
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<NamedEntity> query = builder.createQuery(NamedEntity.class);
Root<NamedEntity> root = query.from(NamedEntity.class);
query = query.where(root.<NamedEntity>get("name").in(name));
//skipped the try/catch block for the sake of brevity
return entityManager.createQuery(query).getSingleResult();
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法压缩代码,以避免复制/粘贴相同的代码行到每个查询方法?也许以某种方式重用CriteriaQuery对象?
我正在寻找类似的东西,你可以看看Querydsl(LGPL 许可),它可以将 JPA 作为后端。
我仍在阅读它,但从他们的例子来看,它看起来很干净。
HQLQuery q = new HibernateQuery(session);
QCat cat = new QCat("cat"); // query type
List<Cat> cats = q.from(cat).where(cat.name.between("A", "B")).list(cat);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1481 次 |
最近记录: |