2016-07-13 5 views
0

クエリの実行に問題があります。春データがクエリを実行していません

ここ

は私の構造体である:

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; 
} 

は、ここに私のPriceRepository

です私が間違っているのは何

java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [com.eternity.model.Product (n/a)]]

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(); 
} 

は今、私はPriceRepositoryfindPriceを実行しようとしていたとき、私はのエラーを取得していますか?

EDIT

私はヴィムから受け取った良い答えにもかかわらず、私は行くことにdecied:

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

答えて

3

あなたのクエリメソッドは、メソッドの引数としてLongを期待しますが、あなたのJPQLクエリでProductが必要です。

クエリメソッドの引数をProductに変更します。

+0

の下にこれは素晴らしいを働いたが、別の問題につながりましたを変更する必要があり

ERROR :GROUP BY句にcolumn "productpri0_.price"を指定するか、集計関数で使用する必要があります:( – uksz

+0

@uksz別の質問をしたいかもしれません。 –

+0

私はそれはあなたが '@ ManyToOne'これは、1つの「製品」製品に対して多くの「価格」の結果があることを意味します。 – ddb

1

ProductPriceモデルクラスはProduct productプロパティで、Long productではなく、このエラーが発生しています。 SQLGrammarExceptionを:根本原因 org.postgresql.util.PSQLExceptionで] ResultSetを抽出することができませんでした:あなたは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(); 
} 
関連する問題