我知道entityManager.find()方法可用于使用主键获取一行。JPA使用where子句选择行
但我有一个要求来定义一个普通的查找方法,它接受具有where子句条件的地图。在映射中,键将是列名,值将是where子句的列名值。此方法应返回选定行的列表。
有人可以帮我吗?
我知道entityManager.find()方法可用于使用主键获取一行。JPA使用where子句选择行
但我有一个要求来定义一个普通的查找方法,它接受具有where子句条件的地图。在映射中,键将是列名,值将是where子句的列名值。此方法应返回选定行的列表。
有人可以帮我吗?
找到取主行的方向。现在如你所愿 “”通用的查找方法,它接受具有where子句条件的地图。在地图中,键将是列名,值将是列这个方法应该返回所选行的列表“ ”,因此您必须像这样去找CriteriaQuery:
以下简单的Criteria查询返回数据源中Pet实体的所有实例:
EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Pet> cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
cq.select(pet);
TypedQuery<Pet> q = em.createQuery(cq);
List<Pet> allPets = q.getResultList();
等效JPQL查询:
SELECT p FROM Pet p
而且我会建议你去基于注解映射在你的实体&找二传手& getter是否methods.In该设计还可以通过java的逻辑已经定制方法为此去here阅读。
我想我应该通过CriteriaBuilder来做到这一点,谢谢 – Ani
看一看:EntityManager.createQuery。如果我正确理解你的问题,这将允许你创建你想要执行的查询。你也可以看看使用CriteriaBuilder。
以下可能是矫枉过正,但是使用criteriaBuilder来处理它是一种相当通用的方法。虽然我无法将代码粘贴到此处(工作),但我创建了一个抽象BaseFilter <实体>类。
那么容易的部分是让实现对象提供getXX,setXX属性。然后添加getPredicates()以返回谓词的ArrayList,然后抽象BaseDAO可以调用它来执行查询。
我们专门为getXX和setXXX工作,所以我们可以通过get(Entity1_.childObject).get(ChildObject_.grandChildObject)来引用元素以协助重构。 JPA也通过字符串名称支持它,所以你可以用它来实现getPredicates。
JPA在其调用中需要实际的Entity.class引用,试图获得它有点有趣。最终谷歌搜索转向了它。
您拥有哪个JPA版本? – VibrantVivek