添加ORDER BY子句时,JPA忽略左外连接注释

时间:2014-04-03 16:19:13

标签: java hibernate jpa eclipselink outer-join

我有一个实体,看看这个:

@Entity
@Table(name = "LOG_ENTRY")
public class LogEntry implements Serializable {

...
    @JoinFetch(JoinFetchType.OUTER)
    @ManyToOne
    @JoinColumn(name = "SERVER_ID")
    private Server server;
...
}


@Entity
@Table(name = "SERVER")
public class Server extends implements Serializable {
...
    @Column(name = "NAME")
    private String name;
...
}

当我按以下方式构造查询时:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<LogEntry> criteria = builder.createQuery(LogEntry.class);
Root<LogEntry> root = criteria.from(LogEntry.class);

resault SQL是正确的:

SELECT t0.NAME FROM {oj LOG_ENTRY t1 LEFT OUTER JOIN SERVER t0 ON (t0.ID = t1.SERVER_ID)}

但是当我按以下方式将orderBy添加到条件时:

CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<LogEntry> criteria = builder.createQuery(LogEntry.class);
Root<LogEntry> root = criteria.from(LogEntry.class);
criteria.orderBy(builder.desc(root.get("server.name")));

我得到以下SQL(没有外连接!!!)

SELECT t0.NAME FROM SERVER t0, LOG_ENTRY t1 WHERE (t0.ID = t1.SERVER_ID) ORDER BY t0.NAME DESC

我正在使用eclipselink 2.3.3(您可能会注意到,因为我在我的实体中使用了org.eclipse.persistence.annotations.JoinFetch)

有什么方法可以解决这个问题吗? 切换到Hibernate会使其行为正常吗?

0 个答案:

没有答案
相关问题