当前位置: 首页 > 知识库问答 >
问题:

Spring Data JPA Repository方法查询无法分析OrderBy之后的属性名称

穆高澹
2023-03-14

My Repository Method Query无法解析位于OrderBy之后的属性名称,但如果它位于findByfindAllBy之后,则可以解析。我的实体中给我带来问题的属性是zIndex

实体类

@Entity
public class DisplayLayer 
{
  @Id
  @Column(name="DISPLAY_LAYER_ID")
  private Long id;

  @ManyToOne(cascade = CascadeType.ALL)
  @JoinColumn(name="DISPLAY_CONTAINER_ID")
  private DisplayContainer displayContainer;

  @Column(name="NAME")
  private String name;

  @Column(name="Z_INDEX")
  private Long zIndex;

  @Column(name="DESCRIPTION")
  private String description;

  // Getters & Setters
}

存储库类

public interface DisplayLayerRepository extends BaseRepository<DisplayLayer, Long>
{
  // This one method query works just fine
  public List<DisplayLayer> findByZIndex(Long pZIndex);

  // These two throw the same error:
  // Unable to locate Attribute  with the the given name [ZIndex]
  //
  // public List<DisplayLayer> findAllByOrderByZIndexAsc();
  // public List<DisplayLayer> findByDisplayContainerIdOrderByZIndexAsc(Long pDisplayLayerId);
}

因此,在我的第一个方法查询中,当不使用OrderBy时,它正确地将其解析为[zIndex],但是当它遵循OrderBy时,由于某种原因,它将z:[ZIndex]大写。

这是一个已知的问题,还是我做错了什么?

编辑让我觉得解析器可能存在缺陷的地方是,如果我在实体中将zIndex更新为IndexZ,然后将查询方法从OrderByZIndex更改为OrderByIndexZ,一切正常。

这个解决方案并不理想,因为数据库表是Z_INDEX,并且在讨论图形分层时具有特定的含义。

共有2个答案

高墨一
2023-03-14

您可以在查询中使用JpaSort。就像你的情况一样,它看起来是这样的:

Sort sort = JpaSort.unsafe(Sort.Direction.ASC, "zIndex");

List<DisplayLayer> zIndexes = displayLayerRepository.findByZIndex(pZIndex, sort);

您在Repository中的查询将如下所示:

public List<DisplayLayer> findByZIndex(Long pZIndex, Sort sort);
董琦
2023-03-14

是的,有一个错误,但有一个简单的解决方法,请尝试:

displayLayerRepository.findAll(Sort.by(Sort.Order.desc("zIndex").ignoreCase()));

我想DisplayLayerRepository扩展了JpaRepository。

在findBy方法中使用参数时,情况类似。在存储库中定义空方法:

public List<DisplayLayer> findByDisplayContainerId(Long pDisplayLayerId, Sort sort);

然后您可以通过以下方式调用:

displayLayerRepository.findByDisplayContainerId(1L, Sort.by(Sort.Order.desc("zIndex").ignoreCase()));
 类似资料:
  • 我正在尝试执行一个非常基本的查询,并收到org.hibernate.QueryException:无法解析属性。这是我的实体: @table(name="pm_screenconfiguration")公共类ScreenConfiguration扩展了PubleMovilEntity{ } 这是我的问题: 我真的搞不懂。Im使用MySql,所有列都具有相同的实体名称。 谢谢

  • 问题内容: 在Swift中,我尝试执行以下操作: Xcode 在方法中在线上报告错误。 为什么?如果将结构更改为类,则不会出错。 问题答案: 如果要修改结构的属性,请将该函数标记为mutating。

  • 我正在尝试查询hibernate表中的RunEntity。查询中的第一个where子句搜索testName=传递值testName的RunEntities。在stacktrace中,它提到在RunEntity中找不到testname类型的匹配项,但是RunEntity对象显式地有一个名为testname的字符串,带有setter和getter以及@Column符号。 表格设置 查询 实体 stac

  • 正如前面的例子所示,属性表达式只能引用托管实体的直接属性。在查询创建的时候你已确认解析的属性是托管实体类的属性之一。然而你也能通过遍历嵌套属性来定义约束。假设一个Person拥有含ZipCode的Address。在这个方法名称中 List<Person> findByAddressZipCode(ZipCode zipCode); 创建了一个属性遍历x.address.zipCo

  • 本文向大家介绍.NET中的属性用法分析,包括了.NET中的属性用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了.NET中的属性用法。分享给大家供大家参考。具体分析如下: 1.What?什么是属性 属性是对字段的封装。当类中有了一个字段以后,为了控制这个字段对外的一些表现(例如可访问性,是只读?只写?或者对自读赋值做一些必要的验证等等)我们把这个字段私有化(private),同时留出