我使用 JPA2 作为 MySQL 连接器并使用查询构建器来构建查询。在尝试按实体参数对结果列表进行排序时,我发现了一些错误:
SEVERE: java.lang.IllegalArgumentException: The attribute [customer}] from the managed type [EntityTypeImpl@1572996478:Documentation [ javaType: class pl.ego.software.entity.Documentation descriptor: RelationalDescriptor(pl.ego.software.entity.Documentation --> [DatabaseTable(documentation)]), mappings: 20]] is not present.
我不确定为什么,但这是唯一不存在于整个实体中的实体参数。尝试使用 Root 类的 get 方法时会引发此异常。
Root<Documentation> u = select.from(Documentation.class);
CriteriaBuilder builder = em.getCriteriaBuilder();
if (sortField != null) {
Order o;
if (sortOrder == SortOrder.ASCENDING) {
o = builder.asc(u.get(sortField));
} else {
o = builder.desc(u.get(sortField));
}
select.orderBy(o);
}
当 sortField 值设置为“客户”时,u.get(sortField) 会引发上述异常。如果 sortField 设置为某个不同的值,则一切正常。
这是确保该参数存在的实体代码的一部分。
@Size(max = 150)
@Column(name = "customer")
private String customer;