我试图阻止实体在没有抛出异常的情况下被持久化。假设我们有一个表,其中包含名为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检查作为该方法的一部分。但是,如果级联操作创建/更新“空”地址行,则无法在不设置数据库中的空约束的情况下阻止操作。
答案 0 :(得分:2)
我从您的问题陈述中理解的是,当您插入的给定行的基本列为空时,您希望在运行时防止not-null constraints
和其他foreign key constraints
出现错误。然后我认为简单的解决方案是: 在entityManager.persist
调用之前对所有这些字段应用空/空检查,如果在DB中插入null / empty,则可能导致错误。这样可以防止错误,并且不会在表格中插入行。