grails - 创建后获取域对象的ID

我正在进行结帐,当用户去购物时,会创建一个Purchase对象并将其保存到数据库中。然后,我获取对象的id并将其发送给PayPal以生成一个按钮(这样以后我就可以识别购买了)。但是,当我尝试检索id时,它返回null。

在访问ID之前,我尝试过刷新它,但是它似乎仍然无法正常工作。

这是我的域对象:

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 {}
}

这是我正在运行的代码:
Purchase purchase = new Purchase(product, user)
purchase.save(flush: true)
println 'purchase id: ' + purchase.id

最佳答案

该ID为null,因为未保存您的对象。之所以不被保存,是因为您没有为buttonId分配值,并且此属性是必需的。您可以使用以下方法进行验证:

Purchase purchase = new Purchase(product, user)
purchase.save(flush: true, failOnError: true) // will throw an exception if saving fails
println 'purchase id: ' + purchase.id

https://stackoverflow.com/questions/39215071/

相关文章:

ssh - 如何测量 SSH 隧道的带宽?

grails - Grails从1.3.7升级到3.2.6的路径

php - 在 PHP 中通过 SSH 与多个服务器交互

spring-mvc - 用于 'dashboard'风格UI(涉及多个域)的 Controller

mongodb - Grails 3 MongoDB无法从application.yml中读取con

ssh - ssh是否可以回显您发送的命令?

pdf - 生成的pdf中的文本是反向的

session - 如何存储操作的参数以供以后再次使用

ssh - Amazon EC2 ssh 登录失败

bash - SSH隧道复杂问题