我有一个实体,看看这个:
@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会使其行为正常吗?