java - JPA - EntityManager 的 findByProperty() 等效项

标签 java hibernate jpa

DAO 提供 findByProperty(String propertyName, Object value) 来查找使用特定属性的对象。但JPA中的EntityManager只提供了基于主键搜索的find(),参见EntityManager

为了避免编写 SQL,EntityManager 是否有等效的通用 findByProperty() 方法?

最佳答案

解决方案:

  1. 使用 @Viswanath L 建议的 Critieria API
  2. 编写您自己的 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/

相关文章:

Java Socket 为什么服务器无法回复客户端

java - 如何解决java.lang.NoSuchMethodError : org. hibernate.integrator.internal.IntegratorServiceImpl

java - JPA Spring EntityManager 的这种奇怪行为的解决方案是什么

mysql - 如何使用 JPA 和 Hibernate 对新实体的子级执行级联合并

java - 创建 hibernate native 查询时出现查询语法异常

java - 逐字节读取二进制文件

java - 创建武器类别和战斗类别

java - 类播异常 : Fragment_main cannot be cast to fragment activity android

hibernate - ejb 3 :is it OK to make all relationships birectional?

java - 使用Spring JpaRepository(由hibernate支持),有没有办法根据GrantedAuthority有条件地过滤字段?