在JPA中实现按示例查询功能

Jos*_*iaz 4 java hibernate jpa

你知道QBE在JPA 中实现类似Hibernate (Query by Example)的方法吗?

对于我的问题域,使用它的替代方法是使用某种字符串操作动态地构建SQL查询,这是我想要避免的.

我知道API中默认不支持此功能,但我认为它是构建动态查询的一种很棒的技术.

有什么建议?

Ara*_*ram 9

QBE在JPA 1.0或2.0中不可用.有关详细信息,请查看此处


Jim*_*ugh 8

在JPA 2.0中,最接近的等价物称为Criteria API.它在JPA 1.0中不存在.

这是一个示例:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery c = cb.createQuery(Person.class);
Root person = c.from(Person.class);
c.select(person)
    .where(cb.equal(person.get("name"), "Officer Friendly"));
Run Code Online (Sandbox Code Playgroud)

  • FindByExample的主要优点之一是您可以自由地重构实体,而不必担心违反依赖于FindByExample的查询.在这个例子中,您会看到如果Person"name"被重构,将其拆分为"firstName"和"lastName",查询将被破坏. (2认同)