【问题标题】:Why is the query returning and error because of the var?为什么由于var而导致查询返回和错误?
【发布时间】:2021-08-17 12:47:43
【问题描述】:
@Repository
public interface StockRepo extends JpaRepository<Stock, Long> {

    @Query("SELECT stock " +
            "FROM Stock stock " +
            "WHERE stock.name = :name AND stock.date = :date AND stock.id != :id")
    Optional<Stock> findByStockUpdate(String name, LocalDate date, Long id);
}

因此,使用此存储库,我在运行应用程序时遇到了一些错误:

无法解析属性:名称:com.santanderdevweek.bootcamp.model.Stock [SELECT stock FROM com.santanderdevweek.bootcamp.model.Stock stock WHERE stock.name = :name AND stock.date = :date AND stock .id != :id]

无法解析属性:名称:com.santanderdevweek.bootcamp.model.Stock [SELECT stock FROM com.santanderdevweek.bootcamp.model.Stock stock WHERE stock.name = :name AND stock.date = :date AND stock .id != :id]

方法 public abstract java.util.Optional com.santanderdevweek.bootcamp.repository.StockRepo.findByStockUpdate(java.lang.String,java.time.LocalDate,java.lang.Long) 的查询验证失败!

在 JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration 上声明的 @EnableJpaRepositories 中定义的 com.santanderdevweek.bootcamp.repository.StockRepo 中定义的名称为“stockRepo”的创建 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: Validation failed for query for public abstract java.util.Optional com.santanderdevweek.bootcamp.repository.StockRepo.findByStockUpdate(java.lang.String,java.time.LocalDate,java.lang.长)!

所有这些都因为查询(imo),需要帮助(对不起,很长的帖子)。

【问题讨论】:

  • Stock 的映射是什么?它有名称成员吗?
  • 嗨@Hugo,你能分享一下Stock实体的实现吗?
  • @Entity @Table(name= "tb_stock") public class Stock { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name= "id") private Long id; @Column(name= "nameStock") private String nameStock; @Column(name= "price") private Double price; @Column(name= "date") private LocalDate dateStock; @Column(name= "variation") private Double variation;
  • @Component public class StockMapper { public Stock toEntity(StockDTO dto){ Stock stock = new Stock(); stock.setId(dto.getId()); stock.setNameStock(dto.getNameStock()); stock.setPrice(dto.getPrice()); stock.setVariation(dto.getVariation()); stock.setDateStock(dto.getDateStock()); return stock; }

标签: spring spring-boot api jpa repository


【解决方案1】:

因为您的实体类没有名称为“name”但名称为“nameStock”的字段。

在查询中将名称更改为 nameStock。

@Query("SELECT stock " +
            "FROM Stock stock " +
            "WHERE stock.nameStock = :nameStock AND stock.date = :date AND stock.id != :id")

【讨论】:

    猜你喜欢
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-31
    • 2021-11-25
    相关资源
    最近更新 更多