使用动态调用作为jpa调用的条件

时间:2013-06-01 20:39:52

标签: java database jpa entitymanager

在以下代码中,我们从特定实体(Pet)获取数据。我可以使用此代码获取 动态任何实体(而不是宠物使用客户,订单等)

CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.where(cb.equal(pet.get("name"), "Fido"));
TypedQuery<Pet> q = em.createQuery(cq);
List<Pet> results = q.getResultList();

2 个答案:

答案 0 :(得分:2)

是的,当然:

public <T> List<T> getEntitiesNamedFido(Class<T> clazz) {
    CriteriaQuery<T> cq = cb.createQuery(clazz);
    Root<T> root = cq.from(clazz);
    cq.where(cb.equal(root.get("name"), "Fido"));
    TypedQuery<T> q = em.createQuery(cq);
    List<T> results = q.getResultList();
}

现在传递任何具有持久性&#34;名称&#34;的实体类。属性,您将获得名为Fido的实体实例列表。

答案 1 :(得分:0)

在函数上使用模板并传递类类型,参数名称和&amp;通过参数的价值观。