Angenommen, ich habe Entitäten (Getter/Setter und verschiedene Details der Kürze halber weggelassen):
@Entity
class Customer{
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
Collection<Coupon> coupons;
}
@Entity
class Coupon{
...
@Temporal(value = TemporalType.TIMESTAMP)
private Date usedOn;
@ManyToOne(fetch = FetchType.LAZY)
@NotNull
Customer customer;
}
Ich möchte alle Gutscheine für einen bestimmten Kunden mit null usedOn abrufen. Ich habe eine Methode im CouponRepository nicht erfolgreich definiert, wie in docs beschrieben
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer);
}
aber dies führt zu einem Compilerfehler Syntax error, insert "... VariableDeclaratorId" to complete FormalParameterList
.
Mein Fehler ist die korrekte Definition
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
}
Ich habe einfach den Parameternamen verpasst :-(
Versuchen Sie, Ihre Methode auf diese umzustellen (vorausgesetzt, Customer.id
Ist eine lange):
Collection<Coupon> findByCustomer_IdAndUsedOnIsNull(Long customerId);
dann benutze wie folgt:
repo.findByCustomer_IdAndUsedOnIsNull(customer.getId());
Sie können IsNull verwenden, um Nullspalten in JPA-Abfragen zu überprüfen.
Zum Beispiel für jede columnA können Sie Abfrage wie Abfrage wie schreiben
findByColumnAIsNull
In diesem Fall können Sie Anfragen wie schreiben
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
List<Coupon> findByUsedOnIsNull();
}
Sie können auch überprüfen, wie diese Abfragen sein werden Diese JPA-Abfrage für die Frühjahrsdaten erstellen. Dies wird Ihnen dabei helfen, verschiedene Arten von JPA-Abfragevariationen zu verstehen und zu erstellen.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation