Ich habe ein Repository als mit einem Verfahren, darin definiert folgt:SpringData Repository Verfahren leere Auflistung Rückkehr
public interface BillPaymentRepository extends JpaRepository<BillPayment, String>{
Collection<BillPayment> findByBillBillNumber(String billNo);
}
Relevante Einheiten sind wie folgt:
@Entity
public class BillPayment {
@Id
private String transactionNumber;
@ManyToOne
private Bill bill;
private Float amountPaid;
public String getTransactionNumber() {
return transactionNumber;
}
public Bill getBill() {
return bill;
}
public Float getAmountPaid() {
return amountPaid;
}
public BillPayment(String transactionNumber, Bill bill, Float amountPaid) {
this.transactionNumber = transactionNumber;
this.bill = bill;
this.amountPaid = amountPaid;
}
public BillPayment() {
}
}
andere Entität:
@Entity
public class Bill {
@Id
private String billNumber;
@OneToOne
private User user;
private Month billMonth;
private Float billAmount;
private Float dataUtilized;
public String getBillNumber() {
return billNumber;
}
public User getUser() {
return user;
}
public Month getBillMonth() {
return billMonth;
}
public Float getBillAmount() {
return billAmount;
}
public Float getDataUtilized() {
return dataUtilized;
}
public Bill(String billNumber, User user, Month billMonth, Float billAmount, Float dataUtilized) {
this.billNumber = billNumber;
this.user = user;
this.billMonth = billMonth;
this.billAmount = billAmount;
this.dataUtilized = dataUtilized;
}
public Bill() {
}
}
Im Folgenden finden Sie die Daten in den relevanten Repositories:
Bill bill1 = billRepository.save(new Bill("B1", user1, Month.APRIL, 10F, 10F));
Bill bill2 = billRepository.save(new Bill("B2", user2, Month.APRIL, 60F, 60F));
Bill bill3 = billRepository.save(new Bill("B3", user3, Month.APRIL, 50F, 50F));
Bill bill4 = billRepository.save(new Bill("B4", user4, Month.APRIL, 20F, 20F));
Bill bill5 = billRepository.save(new Bill("B5", user1, Month.MAY, 30F, 30F));
Bill bill6 = billRepository.save(new Bill("B6", user2, Month.MAY, 30F, 30F));
Bill bill7 = billRepository.save(new Bill("B7", user3, Month.MAY, 40F, 40F));
Bill bill8 = billRepository.save(new Bill("B8", user4, Month.MAY, 10F, 10F));
Bill bill9 = billRepository.save(new Bill("B9", user1, Month.JUNE, 10F, 10F));
Bill bill10 = billRepository.save(new Bill("B10", user2, Month.JUNE, 10F, 10F));
Bill bill11 = billRepository.save(new Bill("B11", user3, Month.JUNE, 50F, 60F));
Bill bill12 = billRepository.save(new Bill("B12", user4, Month.JUNE, 20F, 20F));
billRepository.save(new Bill("B13", user1, Month.JULY, 10F, 10F));
billRepository.save(new Bill("B14", user2, Month.JULY, 30F, 30F));
billRepository.save(new Bill("B15", user3, Month.JULY, 15F, 0F));
billRepository.save(new Bill("B16", user4, Month.JULY, 10F, 10F));
billPaymentRepository.save(new BillPayment("T1", bill1, 10F));
billPaymentRepository.save(new BillPayment("T1", bill2, 10F));
billPaymentRepository.save(new BillPayment("T1", bill3, 10F));
billPaymentRepository.save(new BillPayment("T1", bill4, 10F));
billPaymentRepository.save(new BillPayment("T1", bill5, 10F));
billPaymentRepository.save(new BillPayment("T1", bill6, 10F));
billPaymentRepository.save(new BillPayment("T1", bill7, 10F));
billPaymentRepository.save(new BillPayment("T1", bill8, 10F));
billPaymentRepository.save(new BillPayment("T1", bill9, 10F));
billPaymentRepository.save(new BillPayment("T1", bill10, 10F));
billPaymentRepository.save(new BillPayment("T1", bill11, 10F));
billPaymentRepository.save(new BillPayment("T1", bill12, 10F));
Aber wenn ich die Methode aufrufen, um das Ergebnis zu erhalten, wird die leere Sammlung zurückgegeben.
@RestController
@RequestMapping("/payment-details")
class BillPaymentRestController {
private final BillPaymentRepository billPaymentRepository;
@Autowired
public BillPaymentRestController(BillPaymentRepository billPaymentRepository) {
this.billPaymentRepository = billPaymentRepository;
}
@RequestMapping(method=RequestMethod.GET)
Collection<BillPayment> getPaymentDetailsByBillNo(@RequestParam String billNo){
/*System.out.println(billNo);
for (BillPayment billPayment : this.billPaymentRepository.findByBillBillNumber(billNo)) {
System.out.println(billPayment.getTransactionNumber());
}
System.out.println(this.billPaymentRepository.findByBillBillNumber(billNo));*/
return this.billPaymentRepository.findByBillBillNumber(billNo);
}
}
ich POSTMAN bin mit dem Service testen eine GET-Anfrage mit:
localhost:8080/payment-details?billNo=B1
Ich habe andere ähnliche Dienstleistungen solche Funktionalitäten im selben Projekt, die fein arbeiten. Der einzige Unterschied zwischen ihnen und diesem war die Beziehung zwischen Entitäten. Also lese ich über OneToMany und ManyToOne Realationaships. Und nach diesem Tutorial: https://howtoprogramwithjava.com/hibernate-manytoone-unidirectional-tutorial/ alles scheint in Ordnung zu sein.
Kann mir bitte jemand helfen, was mache ich falsch?
Ich denke, Ihre Abfrage 'findByBillBillNumber' ist nicht korrekt. Sie versuchen, auf das BillNumber-Feld innerhalb des Bill-Objekts zuzugreifen. Haben Sie versucht, ein BillRepository zu definieren? Und definieren Sie die Abfrage 'findByBillNumber' in diesem neuen Repository? – amicoderozer
Ich habe bereits 'BillRepository', aber die Methode' findByBillBillNumber' wurde nicht definiert (da IMO nicht benötigt wird, weil ich dasselbe in '' UserRepository'' in anderen Controllern mache und die Methodendefinition in diesen Fällen nicht benötigt wird, nur Repository ist definiert, und es funktioniert gut). Trotzdem habe ich versucht, die Methode hinzuzufügen und keinen Gewinn. –