Ich habe dieses Schema, bei dem ich eine Kopfberichtstabelle habe, jeder Bericht eine Reihe von Kunden und jeder Kunde eine Reihe von Produkten hat, zwei Eins-zu-viele-Beziehungen.
Die Sache Ist der Primärschlüssel meiner Kunden und meines Produkts zusammengesetzt, wie in den Snippets gezeigt.
Meine Header-Entität:
Ich versuche, diese Tabellen aus einer denormalisierten Verlaufstabelle zu füllen, wobei ich eine Berichtsentität erstelle, einen Kunden zu seiner Kundengruppe hinzufüge und das Produkt etwa so zur Produktgruppe des Kunden hinzufüge :
for (var record : bemHistoryEntities) {
String operator = record.getOperator();
String gskCustomerCode = record.getGskCustomerCode();
String distCustCode = record.getDistributorCustomerCode();
String distCode = record.getDistributorCode();
// getting the report header
List headersList = headerEntities.stream().filter(entity ->
(entity.getMonth() == month && entity.getYear() == year && operator.equals(entity.getOperator())))
.collect(Collectors.toList());
SamplesReportHeaderEntity headerEntity = null;
// header coming from the db
if (headersList.size() > 0) {
headerEntity = headersList.get(0);
} else {
// if not persisted before, create it
headerEntity = samplesReportHeaderRepository.save(new SamplesReportHeaderEntity().builder()
.operator(operator)
.month(month)
.year(year)
.printedYN('N')
.build());
headerEntities.add(headerEntity);
}
// creating samples customer from the record
SamplesReportCustomerEntity customer = new SamplesReportCustomerEntity().builder()
.id(new SamplesReportCustomerId(gskCustomerCode, headerEntity.getId(), distCustCode, distCode))
.bemArea(record.getBemArea())
.customerAddress(record.getDistributorCustomerAddress())
.customerName(record.getDistributorCustomerName())
.customerType(record.getBemCustomerType())
.jumpingYN(intermediateEntityMap.get(gskCustomerCode).getJumpingYN())
.repeatedSalesYN(intermediateEntityMap.get(gskCustomerCode).getRepeatedYN())
.expensiveItemsYN(intermediateEntityMap.get(gskCustomerCode).getExpensiveYN())
.productSalesYN(intermediateEntityMap.get(gskCustomerCode).getProductYN())
.normalSalesYN(intermediateEntityMap.get(gskCustomerCode).getNormalYN())
.build();
// creating samples product from the record to the created customer
SamplesReportProductEntity product = new SamplesReportProductEntity().builder()
.id(new SamplesReportProductId(distCode, distCustCode, record.getInvoiceNumber(), record.getSalesType(), record.getDistributorItemCode(), record.getBatchCode(), record.getInvoiceDate()))
.brand(record.getBrand())
.itemDescription(record.getGskItemDescription())
.GSKItemCode(record.getGskItemCode())
.build();
customer.getProducts().add(product);
headerEntity.getCustomers().add(customer);
}
Alles ist in Ordnung, bis die Commit-Phase beginnt. Es wird immer versucht, eine Zeile in die Berichtskopftabelle einzufügen, die ich auf keinen Fall erstellt habe, und selbst wenn ich den Inhalt des Persistenzkontexts gedruckt habe war auch nicht da, und natürlich verstößt es gegen die Nicht-Null-Einschränkungen, was dazu führt, dass die gesamte Transaktion fehlschlägt.
persistence context after the function execution:
Entity in context: HEADER: {67,10,2024,Hossam}
Entity in context: HEADER: {66,10,2024,Vacant}
Entity in context: HEADER: {69,10,2024,Samir}
Entity in context: HEADER: {68,10,2024,Saad}
Ich habe die Ausführung der gesamten Funktion debuggt, aber die Funktion commitTransactionAfterReturning löst immer den oben genannten Fehler aus.
Ich habe dieses Schema, bei dem ich eine Kopfberichtstabelle habe, jeder Bericht eine Reihe von Kunden und jeder Kunde eine Reihe von Produkten hat, zwei Eins-zu-viele-Beziehungen. Die Sache Ist der Primärschlüssel meiner Kunden und meines Produkts zusammengesetzt, wie in den Snippets gezeigt. Meine Header-Entität: [code]@Entity @Builder @Getter @NoArgsConstructor @Table(name = "samples_report_header") public class SamplesReportHeaderEntity implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private Long id;
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; SamplesReportProductId that = (SamplesReportProductId) o; return Objects.equals(distributorCode, that.distributorCode) && Objects.equals(distributorCustomerCode, that.distributorCustomerCode) && Objects.equals(distributorInvoiceId, that.distributorInvoiceId) && Objects.equals(salesType, that.salesType) && Objects.equals(distributorItemCode, that.distributorItemCode) && Objects.equals(batchCode, that.batchCode) && Objects.equals(distributorInvoiceDate, that.distributorInvoiceDate); } @Override public int hashCode() { return Objects.hash(distributorCode, distributorCustomerCode, distributorInvoiceId, salesType, distributorItemCode, batchCode, distributorInvoiceDate); } } [/code] Ich versuche, diese Tabellen aus einer denormalisierten Verlaufstabelle zu füllen, wobei ich eine Berichtsentität erstelle, einen Kunden zu seiner Kundengruppe hinzufüge und das Produkt etwa so zur Produktgruppe des Kunden hinzufüge : [code]for (var record : bemHistoryEntities) { String operator = record.getOperator(); String gskCustomerCode = record.getGskCustomerCode(); String distCustCode = record.getDistributorCustomerCode(); String distCode = record.getDistributorCode();
// getting the report header List headersList = headerEntities.stream().filter(entity -> (entity.getMonth() == month && entity.getYear() == year && operator.equals(entity.getOperator()))) .collect(Collectors.toList()); SamplesReportHeaderEntity headerEntity = null;
// header coming from the db if (headersList.size() > 0) { headerEntity = headersList.get(0); } else { // if not persisted before, create it headerEntity = samplesReportHeaderRepository.save(new SamplesReportHeaderEntity().builder() .operator(operator) .month(month) .year(year) .printedYN('N') .build()); headerEntities.add(headerEntity); }
// creating samples customer from the record SamplesReportCustomerEntity customer = new SamplesReportCustomerEntity().builder() .id(new SamplesReportCustomerId(gskCustomerCode, headerEntity.getId(), distCustCode, distCode)) .bemArea(record.getBemArea()) .customerAddress(record.getDistributorCustomerAddress()) .customerName(record.getDistributorCustomerName()) .customerType(record.getBemCustomerType()) .jumpingYN(intermediateEntityMap.get(gskCustomerCode).getJumpingYN()) .repeatedSalesYN(intermediateEntityMap.get(gskCustomerCode).getRepeatedYN()) .expensiveItemsYN(intermediateEntityMap.get(gskCustomerCode).getExpensiveYN()) .productSalesYN(intermediateEntityMap.get(gskCustomerCode).getProductYN()) .normalSalesYN(intermediateEntityMap.get(gskCustomerCode).getNormalYN()) .build();
// creating samples product from the record to the created customer SamplesReportProductEntity product = new SamplesReportProductEntity().builder() .id(new SamplesReportProductId(distCode, distCustCode, record.getInvoiceNumber(), record.getSalesType(), record.getDistributorItemCode(), record.getBatchCode(), record.getInvoiceDate())) .brand(record.getBrand()) .itemDescription(record.getGskItemDescription()) .GSKItemCode(record.getGskItemCode()) .build();
customer.getProducts().add(product); headerEntity.getCustomers().add(customer); } [/code] Alles ist in Ordnung, bis die Commit-Phase beginnt. Es wird immer versucht, eine Zeile in die Berichtskopftabelle einzufügen, die ich auf keinen Fall erstellt habe, und selbst wenn ich den Inhalt des Persistenzkontexts gedruckt habe war auch nicht da, und natürlich verstößt es gegen die Nicht-Null-Einschränkungen, was dazu führt, dass die gesamte Transaktion fehlschlägt.
[code]persistence context after the function execution: Entity in context: HEADER: {67,10,2024,Hossam} Entity in context: HEADER: {66,10,2024,Vacant} Entity in context: HEADER: {69,10,2024,Samir} Entity in context: HEADER: {68,10,2024,Saad} [/code] Ich habe die Ausführung der gesamten Funktion debuggt, aber die Funktion [b]commitTransactionAfterReturning[/b] löst immer den oben genannten Fehler aus.
Ich bin neu in Python. Ich versuche herauszufinden, ob ein Wert mit einer Zeile aus den Daten und einem anderen gegebenen Wert übereinstimmt, übereinstimmt mit der nächsten Zeile, drucken Sie dann...
Ich programmiere ein virtuelles Haustier. Deshalb habe ich in MainActivity eine Funktion update(), die nicht statisch ist. Ich muss diese Funktion jede Minute aufrufen. Wenn sich das Gerät im...