我有一个带有复合主键的表:

public class IdmTenantBoard implements Serializable {
private static final long serialVersionUID = 1L;

@EmbeddedId
private IdmTenantBoardPK id;

@Column(name="board_display_name")
private String boardDisplayName;

@Column(name="board_name")
private String boardName;


嵌入式类如下所示:

public class IdmTenantBoardPK implements Serializable {
//default serial version id, required for serializable classes.
private static final long serialVersionUID = 1L;

@Column(name="board_id")
private int boardId;

@Column(name="tenant_id")
private String tenantId;


我用来调用查询的方法如下:

public String getMaxBoardId(){
      TypedQuery<String> query = entityManager.createQuery("select o from IdmTenantBoard o order by o.IdmTenantBoardPK.boardId desc",String.class);
      query.setMaxResults(1);
      List<String> lResults = query.getResultList();
      String maxBoardId=null;
      if((null!=lResults)&&(!lResults.isEmpty())){
          maxBoardId=lResults.get(0);
      }
      return maxBoardId;
}


我需要什么来使boardId以降序排序?我收到以下错误:


  由以下原因引起:org.hibernate.QueryException:无法解析属性:IdmTenantBoardPK:com.newrubric.idm.common.entities.IdmTenantBoard [从com.newrubric.idm.common.entities.IdmTenantBoard中选择o或通过o.IdmTenantBoardPK进行排序。 boardId desc]

最佳答案

下面的IdmTenantBoardPK是嵌入式ID的类型,属性的名称是id

@EmbeddedId
private IdmTenantBoardPK id;


这就是为什么o.IdmTenantBoardPK.boardId不能在查询中使用的原因。代替它,应使用o.id.boardId

10-06 16:14