DAO 提供 findByProperty(String propertyName, Object value)
来查找使用特定属性的对象。但JPA中的EntityManager只提供了基于主键搜索的find()
,参见EntityManager
为了避免编写 SQL,EntityManager 是否有等效的通用 findByProperty()
方法?
最佳答案
解决方案:
- 使用 @Viswanath L 建议的 Critieria API
编写您自己的
findByProperty()
,它与 DAO 的findByProperty()
相同,如下所示:public List<User> findByProperty(String propertyName, final Object value) try { final String queryString = "select model from **User** model where model." + propertyName + "= :propertyValue"; Query query = getEntityManager().createQuery(queryString); query.setParameter("propertyValue", value); return query.getResultList(); } catch (RuntimeException re) { logger.error("find by property name failed", re); throw re; } }
我个人更喜欢第二种,因为它简洁,唯一的修改是表名。此外,这种方法很灵活,您可以在此基础上编写 findByProperty() 的许多版本。 p>
关于java - JPA - EntityManager 的 findByProperty() 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31084729/