Java JPA在添加ORDERBY子句时忽略左外部联接注释
我有一个实体,它看起来是这样的:Java JPA在添加ORDERBY子句时忽略左外部联接注释,java,hibernate,jpa,eclipselink,outer-join,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 = "
@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);
但当我以以下方式将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")));
我使用的是eclipselink 2.3.3(您可能会注意到,因为我在实体中使用了org.eclipse.persistence.annotations.JoinFetch)
有什么办法解决这个问题吗?
切换到Hibernate会使它正常工作吗 尝试@ManyToOne(可选=true)
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")));
SELECT t0.NAME FROM SERVER t0, LOG_ENTRY t1 WHERE (t0.ID = t1.SERVER_ID) ORDER BY t0.NAME DESC