防止JPA实体被持久化

时间:2017-07-25 07:06:58

标签: java hibernate jpa eclipselink

我试图阻止实体在没有抛出异常的情况下被持久化。假设我们有一个表,其中包含名为Address的地址行。在地址实体中,我有以下方法:

@PrePersist
@PreUpdate
private void prePersist() {

    if (areAllFieldsInTheEntityEmpty()) {
        throw new PersistenceException("You can not save an empty address!");
    }
}

有没有办法防止地址被保存(所以没有插入只包含空值/空字符串的行)而不会引发异常?

Is there a way to prevent null values from being persisted while allowing others through?

的区别

我的表可以存储包含所有列的行,但PK是空的,这是设计的,因为它允许创建订单,然后将空的送货/帐单地址附加到以后填写。

但是我正在创建一个新的终点,接受我验证的订单详细信息(能够创建订单)。此类订单的送货/开票地址可以为空,并且可以创建此类订单,但这次要求不是创建空的送货/开票地址,而是我想重复使用当前代码(不假定发货/帐单地址可以为空)并且仅阻止在所有字段为空时保存地址。

让我试着用另一种方法解释我的问题。如果只能通过调用AddressFacade.createOrUpdate(address)创建我的所有地址实体,我可以将null / empty检查作为该方法的一部分。但是,如果级联操作创建/更新“空”地址行,则无法在不设置数据库中的空约束的情况下阻止操作。

1 个答案:

答案 0 :(得分:2)

我从您的问题陈述中理解的是,当您插入的给定行的基本列为空时,您希望在运行时防止not-null constraints和其他foreign key constraints出现错误。然后我认为简单的解决方案是: entityManager.persist调用之前对所有这些字段应用空/空检查,如果在DB中插入null / empty,则可能导致错误。这样可以防止错误,并且不会在表格中插入行。