Ich habe ein Problem mit der Abfrageausführung.Spring Data keine Abfrage ausführen
meine Struktur hier:
Product
@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;
}
Hier ist meine ProductPriceDto
@Data
public class ProductPriceDto implements Serializable {
public Float price;
public Date date;
}
Hier ist meine 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)
ProductPriceDto findPrice(@Param(value = "product") Long product);
@Override
List<ProductPrice> findAll();
}
Nun, wenn ich findPrice
auf PriceRepository auszuführen versuche, erhalte ich einen Fehler von:
java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [com.eternity.model.Product (n/a)]]
Was mache ich falsch?
EDIT
Trotz der guten Antworten, die ich von Wim erhalten haben, decied ich mit gehen:
ProductPrice findFirstByProductIdOrderByDateFromDesc(@Param(value = "product") Long product);
Das hat gut funktioniert, aber zu einer neuen Ausgabe führen: SQLGrammarException: ResultSet nicht extrahieren konnte] mit Ursache org.postgresql.util.PSQLException: ERROR : Spalte "productpri0_.price" muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden :( – uksz
@uksz möchten Sie vielleicht eine separate Frage dazu stellen. –
Ich denke, es liegt daran, dass Sie ein '@ ManyToOne' haben Beziehung für diese Eigenschaft, so bedeutet dies, dass Sie viele "Preis" Ergebnisse für ein einzelnes "Produkt" haben – ddb