Spring JpaRepository使用非常规命名从属性中查找实体

时间:2019-02-08 13:40:24

标签: java spring spring-data-jpa

以下内容以前在Spring 1.5.10.RELEASE中可用,但在Spring 2.0.7.RELEASE中不起作用,我也不知道为什么:

实体

@Entity
@Table(name = "locations")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Location {
  // ... unimportant stuff
  @Column(name = "c_locations_id")
  private String cLocationId;
  // ... more unimportant stuff
}

存储库(又称“问题”)

@Repository
public interface LocationRepository extends JpaRepository<Location, Long>, JpaSpecificationExecutor<Location> {
  Location findByCLocationId(String cLocationId);
  List<Location> findAllByOrderByCLocationIdAsc();
}

上面的代码在Spring 2.0.7.RELEASE下出现的错误是

  

java.lang.IllegalArgumentException:无法在此ManagedType上找到具有给定名称[CLocationId]的Attribute。

由于其他情况,我无法更改属性名称,因此我对存储库中的方法尝试了不同的变化:

  • findBycLocationId-找不到位置类型的属性orderBycLocationIdAsc!
  • findByClocationId-找不到位置类型的属性clocationId!您是说'CLocationId','cLocationId'吗?
  • findByCLocationId-无法在此ManagedType上找到具有给定名称[CLocationId]的属性

它想要什么?我只想升级框架...

2 个答案:

答案 0 :(得分:5)

您可以使用如下方法名称:

Location findByC_Location_Id(String cLocationId);

this对于参考资料可能会有所帮助

答案 1 :(得分:1)

您可以在方法official documentation中使用@Query注释。

@Query("select l from Location l where l.cLocationId = ?1")
Location findByCLocationId(String cLocationId);

@Query("select l from Location l")
List<Location> findAllByOrderByCLocationIdAsc();