当前位置: 首页 > 面试题库 >

如何在JPA 2.0中编写带有where子句的M​​AX查询?

端木望
2023-03-14
问题内容

我正在使用JPA 2.0。Hibernate 4.1.0.Final和Java6。如何从以下psuedo-SQL编写JPA查询?

select max(e.dateProcessed) from Event e where e.org = myOrg

我的域对象如下所示:

@GenericGenerator(name = "uuid-strategy", strategy = "org.mainco.subco.core.util.subcoUUIDGenerator")
@Entity
@Table(name = "sb__event",
    uniqueConstraints = { @UniqueConstraint(columnNames={"EVENT_ID"}) }
)
public class Event
{

    @Id
    @Column(name = "ID")
    @GeneratedValue(generator = "uuid-strategy")
    private String id;

    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.REMOVE})
    @JoinColumn(name = "ORGANIZATION_ID", nullable = false, updatable = true)
    private Organization org;

    @Column(name = "DATE_PROCESSED")
    @NotNull
    private java.util.Date dateProcessed;

我知道涉及CriteriaBuilder.greatest,但是我只是不知道如何编写查询。这将返回所有与组织匹配的事件对象,但据我所知。

final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
final CriteriaQuery<Event> criteria = builder.createQuery(Event.class);
final Root<Event> event = criteria.from(Event.class);
criteria.select(event);
criteria.where(builder.equal(Event.get("org"), org));
results.addAll(m_entityManager.createQuery(criteria).getResultList());

问题答案:

有两种方法,一种使用JPQL,另一种使用条件查询。
JPQL就是:

em.createQuery("select max(e.dateProcessed) from Event e where e.org = :myOrg")
  .setParameter("myOrg", myOrg)
  .getSingleResult();

使用条件时,您可能会:

CriteriaBuilder qb = em.getCriteriaBuilder();
CriteriaQuery<Number> cq = qb.createQuery(Number.class);
Root<Event> root = cq.from(Event.class);
cq.select(qb.max(root.get("dateProcessed")));
cq.where(qb.equal(Event.get("org"), qb.parameter(MyOrgType.class, "myOrg")));
em.createQuery(cq).setParameter("myOrg", myOrg).getSingleResult();


 类似资料:
  • 问题内容: 我有这样的查询- 由于将rowz = 1放入查询中,因此该查询无法正常工作?如果我只想要在嵌套后rowz = 1的结果该怎么办。 当我这样做时- 从news_article中选择unnest(string_to_array(na.news_category_id,’,’)):: int rowz; 我的桌子是- 然后它给了我这个结果- 问题答案: 这回答了您的问题: 诀窍是将数组放入一

  • 我想写这样的东西: 正如你所看到的,我不能只写像<代码>这样的东西。文档(id),因为我使用了查询对象(where调用)。 我已经看到了这个问题的一些答案,但不是Java。事实上: https://stackoverflow.com/a/52252264/6500085

  • 数据库:Sybase Advantage 11 在我对数据进行规范化的过程中,我试图删除从以下语句中得到的结果:

  • 问题内容: 谁能给我一些关于如何将这种子查询放入提示?(我正在使用 JPA 2.0 - Hibernate 4.x ) -第二个选择将始终获得单个结果或null。 问题答案: 尝试类似以下示例的操作来创建子查询: 请注意,由于附近缺少IDE,因此该代码尚未经过测试。

  • 问题内容: 我想加入两个表CUSTMR和DEPRMNT。 我需要的是:LEFT OUTER JOIN内有两个或多个带有子查询的表的LEFT OUTER JOIN,如下所示: 表格:CUSTMR,DEPRMNT 查询为: 这里的子查询是: 是否可以在LEFT OUTER JOIN内编写这样的子查询? 在我的DB2数据库上运行此查询时出现错误。 问题答案: 您需要在子选择上使用“ correlatio

  • 例如,我想做这样的事情: 新建Select().from(Table).where(“id in?”,list).execute()