JPQL使用where子句连接表

时间:2014-07-22 14:15:40

标签: java sql jpql

我有一张带有forign键的表,如下所示:

    @NotNull
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="BASE_ID", updatable = false)
    private Base base;

使用" id"连接到Base表。 ..我试图用where子句查询它,但我遇到了错误,我的查询看起来像:

return getEntityManager()
.createQuery("SELECT a FROM BaseEventLog a join fetch a.base p WHERE p.eventStatus = 'ERROR'",
                        BaseEventLog.class)
                .getResultList();

在sql中它看起来像这样:

SELECT *
  FROM BASE_EVENT_LOG
  JOIN BASE
  ON BASE.ID=BASE_EVENT_LOG.BASE_ID
  WHERE EVENT_STATUS = 'ERROR'

有关如何使用jpsql创建此类查询的任何建议吗?

1 个答案:

答案 0 :(得分:0)

SELECT a FROM BaseEventLog a 
  join a.base p 
WHERE p.eventStatus = 'ERROR'

不需要fetch;或者至少我从未在JPQL中使用它。如果你想使用fetch关键字,请看一下如何在这里使用它:

http://docs.oracle.com/cd/E17904_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_fetch_joins