【问题标题】:Entity parameter cannot be used by Root's get methodRoot的get方法不能使用Entity参数
【发布时间】:2013-01-27 18:37:25
【问题描述】:

我使用 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;

【问题讨论】:

  • 检查属性是否为customer,而不是customer}。检查错误The attribute [customer}] from ... 提示:如果仍然可以切换,请使用 QueryDSL 而不是 Criteria API。
  • +1 用于 QueryDSL
  • 切换为时已晚 ;) 无论如何感谢您的建议 :)

标签: java jpa-2.0 root


【解决方案1】:

不完全是,但你的帖子给了我一些线索。基本上是的,由于字段名称末尾的“}”符号引发了异常,但直到现在才知道为什么:) 我遇到了一些问题

 sortBy="#{element.customer} "

最后有空白。

 sortBy="#{element.customer}"

删除它修复了整个事情;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-07-18
    • 2016-08-31
    • 1970-01-01
    • 2015-06-10
    • 2018-06-03
    相关资源
    最近更新 更多