我喜欢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();
}
}
有没有一种方法可以压缩代码,以避免将相同的代码行复制/粘贴到每个查询方法中?也许以某种方式重用了CriteriaQuery对象?
似乎没有办法减少代码量。我想必须牺牲一些东西以获得类型安全。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句