Ich arbeite an einem Checkout, wenn der Benutzer einen Einkauf tätigt, wird ein Purchase
Objekt erstellt und in der Datenbank gespeichert. Ich nehme dann die id
des Objekts und sende es an PayPal, um eine Schaltfläche zu generieren (auf diese Weise kann ich den Kauf später identifizieren). Wenn ich jedoch versuche, die ID zurückzuholen, gibt sie null zurück.ID des Domänenobjekts nach der Erstellung abrufen
Ich habe versucht, es zu löschen, bevor ich auf die ID zugreife, aber es scheint immer noch nicht zu funktionieren.
Hier ist meine Domain-Objekt:
package website
import java.time.Instant
import java.time.temporal.ChronoUnit
class Purchase {
String buttonId
final Instant expires
private boolean complete
User user
Product product
Purchase(Product product, User user) {
this.product = product
this.user = user
expires = Instant.now().plus(1, ChronoUnit.DAYS)
}
void completePurchase() {
// confirm that the purchase hasn't been completed already
if (complete) {
throw new PurchaseAlreadyCompleteException()
}
complete = true
}
boolean isComplete() {
return complete
}
static class ButtonIdAlreadyInitializedException extends RuntimeException {}
static class PurchaseAlreadyCompleteException extends RuntimeException {}
}
Hier ist der Code Ich verwende:
Purchase purchase = new Purchase(product, user)
purchase.save(flush: true)
println 'purchase id: ' + purchase.id
Vom Designstandpunkt aus wäre es eine bessere Idee, eine separate Sequenz als Geschäftsschlüssel für PayPal zu verwenden. Sie sollten die Primärschlüssel für Ihre Daten niemals mit Dritten teilen. –
haben Sie möglicherweise einen Fehler beim Speichern. Sie können 'save (failOnError: true)' verwenden, um einen Fehler auszulösen, wenn Sie einen haben. –