我的存储库方法查询无法解析在OrderBy
之后的属性名称,但是可以在findBy
或findAllBy
之后进行解析。我的实体给我带来的问题是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:{ {1}}。
这是一个已知问题,还是我做错了什么?
编辑
使我认为解析器可能存在错误的是,如果我将实体中的[ZIndex]
更新为zIndex
,然后将查询方法从IndexZ
更改为OrderByZIndex
有效。
此解决方案并不理想,因为数据库表为OrderByIndexZ
,并且在谈论图形分层时具有特定含义。
答案 0 :(得分:2)
是的,但是有一个错误,但是有一个简单的解决方法,请尝试:
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()));
答案 1 :(得分:1)
您可以在查询中使用JpaSort。如您的情况,它看起来像这样:
Sort sort = JpaSort.unsafe(Sort.Direction.ASC, "zIndex");
List<DisplayLayer> zIndexes = displayLayerRepository.findByZIndex(pZIndex, sort);
,您在存储库中的查询将如下所示:
public List<DisplayLayer> findByZIndex(Long pZIndex, Sort sort);