假如Customer类,有address,addressZip字段,其中address是一个类,该类包括zipCode字段。当通过address.zipCode查询customer时,repository中定义方法:
接口方法:
List findByAddressZipCode(ZipCode zipCode);
spring的遍历算法先找是否存在addressZipCode属性,不存在,再通过camel case(驼峰格式)约定从右向左遍历字段,AddressZip,Code未匹配 -> Address, ZipCode匹配。但在属性名冲突时,查询的结果回出错,例如Customer类也有addressZip字段时,结果就不准了。spring通过在方法名中添加underscore(_)解决这种歧义,修改后的接口方法:
List findByAddress_ZipCode(ZipCode zipCode);
根据Key-value查询:
@Query("{ ?0 : ?1 }")
List findByAttributes(String key,String value);