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 FormalParameterList
te 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
Raadpleeg deze Spring Data JPA Query-creatie, dit zal u veel helpen om verschillende soorten JPA-queryvariaties te begrijpen en te creëren.
Antwoord 3, autoriteit 35%
Probeer je methode hierin te veranderen (ervan uitgaande dat Customer.id
lang is):
Collection<Coupon> findByCustomer_IdAndUsedOnIsNull(Long customerId);
gebruik dan als volgt:
repo.findByCustomer_IdAndUsedOnIsNull(customer.getId());