web-dev-qa-db-fra.com

Requête de données Spring où la colonne est nulle

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.

21
lrkwz

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 :-(

15
lrkwz

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

13
Xorty

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 enter image description here 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

7
Nikunj Undhad