- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有没有人有一个很好的例子来说明如何在 JPA 中通过任何实体类型的反射在通用 DAO 中执行 findByExample?我知道我可以通过我的提供者(Hibernate)做到这一点,但我不想打破中立性......
似乎标准 API 可能是要走的路……但我不确定如何处理它的反射部分。
最佳答案
实际上,按示例查询 (QBE) 已被考虑包含在 JPA 2.0 规范中,但并未包含在内,即使主要供应商支持它。引用迈克·基思:
I'm sorry to say that we didn't actually get to do QBE in JPA 2.0. Criteria API does not have any special operators for it so entity equality is just like in JP QL, based on PK value. Sorry, but hopefully we'll be more successful on that front in the next go-round. For now it is one of those vendor features that every vendor supports, but is not in the spec yet.
以防万一,我为以下主要供应商添加了(非通用)示例代码,用于文档目的。
以下是在 EclipseLink JPA 2.0 引用实现中使用 QBE 的示例:
// Create a native EclipseLink query using QBE policy
QueryByExamplePolicy policy = new QueryByExamplePolicy();
policy.excludeDefaultPrimitiveValues();
ReadObjectQuery q = new ReadObjectQuery(sampleEmployee, policy);
// Wrap the native query in a standard JPA Query and execute it
Query query = JpaHelper.createQuery(q, em);
return query.getSingleResult();
OpenJPA 通过其扩展的 OpenJPAQueryBuilder
接口(interface)支持这种查询方式:
CriteriaQuery<Employee> q = cb.createQuery(Employee.class);
Employee example = new Employee();
example.setSalary(10000);
example.setRating(1);
q.where(cb.qbe(q.from(Employee.class), example);
以及使用 Hibernate 的 Criteria API:
// get the native hibernate session
Session session = (Session) getEntityManager().getDelegate();
// create an example from our customer, exclude all zero valued numeric properties
Example customerExample = Example.create(customer).excludeZeroes();
// create criteria based on the customer example
Criteria criteria = session.createCriteria(Customer.class).add(customerExample);
// perform the query
criteria.list();
现在,虽然应该可以使用 JPA 2.0 标准 API 和反射以供应商中立的方式实现一些接近的东西,但我真的想知道是否值得付出努力。我的意思是,如果您将上述任何片段设为通用并将代码放入 DAO 方法中,那么如果需要,从一个供应商切换到另一个供应商将非常容易。我同意这并不理想,但仍然如此。
关于java - JPA - FindByExample,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2880209/
有没有人有一个很好的例子来说明如何在 JPA 中通过任何实体类型的反射在通用 DAO 中执行 findByExample?我知道我可以通过我的提供者(Hibernate)做到这一点,但我不想打破中立性
我有两个表用户和地址表 它们在 HBM 中的关系是 因此,当我在 User Pojo 中设置 Address Pojo 并为 User Pojo 调用 findByExample 时。 它
我正在尝试使用 Hibernate QBE(实际上是 Spring 的 HibernateTemplate.findByExample() )按用户名返回用户列表。我使用“已知良好”值进行搜索(数据库
我正在为一个新项目使用 Hibernate 开发域模型。我有一个基本上由 longName:String 组成的实体, shortName:String和 otherNames:Collection
我正在使用 hibernate 4 和 Spring 3。正如长标题所说,我需要创建一个这样的方法 public list findByExample(MyObject exampleInstance
我是一名优秀的程序员,十分优秀!