Voorjaarsgegevensquery waarbij kolom null is

Stel dat ik entiteiten heb (getters/setters en verschillende details weggelaten voor de beknoptheid):

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

Ik wens alle coupons op te halen voor een bepaalde klant die null gebruiktOn.
Ik heb zonder succes een methode gedefinieerd in de CouponRepository zoals beschreven in docs

@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
     Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer);
}

maar dit leidt tot een compilerfout Syntax error, insert "... VariableDeclaratorId" to complete FormalParameterListte voltooien.


Antwoord 1, autoriteit 100%

Mijn fout, de juiste definitie is

@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
     Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
}

Ik heb gewoon de parameternaam gemist 🙁


Antwoord 2, autoriteit 62%

U kunt IsNullgebruiken om null-kolommen in een JPA-query te controleren.

Voor elke kolomAkunt u bijvoorbeeld een zoekopdracht als een zoekopdracht als

schrijven

findByColumnAIsNull

In dit geval kunt u zoekopdrachten schrijven zoals

@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
 Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
 List<Coupon> findByUsedOnIsNull();
}

U kunt ook controleren hoe deze zoekopdrachten zullen zijn
voer hier de afbeeldingsbeschrijving in
Raadpleeg deze Spring Data JPA Query-creatie, dit zal u veel helpen om verschillende soorten JPA-queryvariaties te begrijpen en te creëren.

https ://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation


Antwoord 3, autoriteit 35%

Probeer je methode hierin te veranderen (ervan uitgaande dat Customer.idlang is):

Collection<Coupon> findByCustomer_IdAndUsedOnIsNull(Long customerId);

gebruik dan als volgt:

repo.findByCustomer_IdAndUsedOnIsNull(customer.getId());

Other episodes