繁体   English   中英

Spring Data未执行查询

[英]Spring Data not executing query

我在执行查询时遇到问题。

这是我的结构:

ProductPrice

@Data
@Entity
@Table(name="\"Product_price\"")
public class ProductPrice {
    @Id
    @SequenceGenerator(name="product_price_id_seq",
            sequenceName="product_price_id_seq",
            allocationSize=1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE,
            generator="product_price_id_seq")
    private long id;
    private Float price;
    private Date date_from;
    @ManyToOne
    private Product product;
}

这是我的ProductPriceDto

@Data
public class ProductPriceDto implements Serializable {
    public Float price;
    public Date date;
}

这是我的价格仓库

public interface PriceRepository extends CrudRepository<ProductPrice, Long> {
    public static final String FIND_LAST_PRICE = "SELECT p.price, MAX(p.date_from) FROM ProductPrice p WHERE p.product = ?1 GROUP BY p.product";

    @Query(FIND_LAST_PRICE)
    ProductPriceDto findPrice(@Param(value = "product") Long product);

    @Override
    List<ProductPrice> findAll();
}

现在,当我试图执行findPricePriceRepository,我得到的错误:

java.lang.IllegalArgumentException:参数值[1]与预期的类型[com.eternity.model.Product(n / a)]不匹配]

我究竟做错了什么?

编辑

尽管我从Wim收到了很好的答复,但我还是选择:

ProductPrice findFirstByProductIdOrderByDateFromDesc(@Param(value = "product") Long product);

您的查询方法期望使用Long作为方法参数,但是在JPQL查询中,您需要Product

将查询方法参数更改为Product

ProductPrice模型类具有Product product属性,而不是Long product ,因此,您将遇到该错误。

您应该在下面更改您的PriceRepository

public interface PriceRepository extends CrudRepository<ProductPrice, Long> {
    public static final String FIND_LAST_PRICE = "SELECT p.price, MAX(p.date_from) FROM ProductPrice p WHERE p.product = ?1 GROUP BY p.product";

    @Query(FIND_LAST_PRICE)
    List<ProductPrice> findPrice(@Param(value = "product") Product product);

    @Override
    List<ProductPrice> findAll();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM