首页 > 解决方案 > 如何使用 OpenXava/JPA 验证嵌套引用对象 (@ManyToOne) 是否存在?

问题描述

在我的 OpenXava 应用程序中,我有一个名为 Parcel 的类,它引用了 TaxAccount 类:

@Entity 
public Parcel {

    @ManyToOne
    TaxAccount taxAccout;

}

另外,我有一个名为 Assessment 的类,它引用 Parcel:

@Entity
public class Assessment {

    @ManyToOne
    Parcel parcel;

}

保存评估时,我想检查/验证引用的包裹是否有与其关联的 TaxAccount。如果引用的 Parcel 具有 TaxAccount,则评估的保存操作应该成功,否则保存操作应该失败。

如何使用 OpenXava 实现这一目标?

标签: javajpabean-validationopenxava

解决方案


最简单的方法是将验证包含在实体本身中,通过这种方式:

public class Assessment {

    @AssertTrue(message="parcel_must_have_tax_account")
    private boolean parcelHasTaxAccount() {
        return parcel != null && parcel.getTaxAccount() != null;
    }

}

请注意,@AssertTrue 不是 OpenXava 注释,而是 Bean Validation 注释,因此此验证将适用于 OpenXava,但也适用于在 OpenXava 之外使用 JPA 实体时。

有关 OpenXava 中的更多验证替代方法,请查看:

https://openxava.org/OpenXavaDoc/docs/validation_en.html


推荐阅读