嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名称为'cityDao'的bean时出错:调用init方法失败;嵌套异常是java.lang.IllegalArgumentException:无法为方法public abstract java.util.List com.server.repository.location.CityDao.findAllWithCountry()创建查询!没有找到类型为City的属性findAllWithCountry!
@Transactional
public interface CityDao extends JpaRepository<City, Integer> {
@EntityGraph(attributePaths = "country")
List<City> findAllWithCountry(); //this one does not work
@EntityGraph(attributePaths = "country")
City findOneWithCountryById(int id); //this one works
}
实体:
@Entity
@Table(name = "city", uniqueConstraints = {
@UniqueConstraint(columnNames = {"country", "city_name", "latitude", "longitude"})
})
@Data
public class City {
@ManyToOne(fetch = FetchType.LAZY)
@NotNull
@JoinColumn(name = "country")
private Country country;
}
我正在尝试实现@EntityGraph
以提高API性能。
第一种方法在工作时抛出BeanCreationException
。唯一的区别是第一个返回集合,第二个返回单个实体。有办法解决吗?
答案 0 :(得分:0)
关键问题不是country
的{{1}}属性,请看一下堆栈跟踪:
City
这意味着它根本无法导出查询 ,更不用说找到No property findAllWithCountry found for type City!
属性了。
您可以覆盖默认的country
:
findAll
哪个优化将应用于您的所有@EntityGraph(attributePaths = "country")
@Override
List<City> findAll();
。
过去,当我遇到这种情况(我想拥有多个具有相同查询属性但每个注释都不同的派生方法)时,就是写customize the base repo或用{{1}写查询}。