Supposons que j'ai des entités (getters/setters et divers détails omis par souci de concision):
@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;
}
Je souhaite récupérer tous les coupons pour un client donné ayant null usedOn. J'ai, sans succès, défini une méthode dans le CouponRepository comme décrit dans docs
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer);
}
mais cela entraîne une erreur de compilation Syntax error, insert "... VariableDeclaratorId" to complete FormalParameterList
.
Ma faute, la bonne définition est
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
}
J'ai simplement raté le nom du paramètre :-(
Essayez de changer votre méthode en ceci (en supposant que Customer.id
Est long):
Collection<Coupon> findByCustomer_IdAndUsedOnIsNull(Long customerId);
puis utilisez comme ceci:
repo.findByCustomer_IdAndUsedOnIsNull(customer.getId());
Vous pouvez utiliser IsNull pour vérifier les colonnes nulles dans la requête JPA.
Par exemple pour tout columnA vous pouvez écrire une requête comme une requête comme
findByColumnAIsNull
Dans ce cas, vous pouvez écrire des requêtes comme
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
List<Coupon> findByUsedOnIsNull();
}
Vous pouvez également vérifier comment ces requêtes seront Reportez-vous à la création de cette requête Spring Data JPA, cela vous aidera à comprendre et à créer différents types de variations de requêtes JPA.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation