问题: 如果只需要ID而不获取ConstraintValidator异常,如何将对象Account保存为嵌套对象?
问题是因为我已经将验证规则设置为类,但是当我想将sem实体保存为嵌套对象时,我得到一些属性值缺失的异常。因此,当我想要将对象作为一个整体保存时,以及当我只想使用嵌套对象时(当只需要ID时),我会说谎有不同的验证规则。
public class Account {
private int id;
@NotNull
private String name;
@NotNull
private String lastName;
@NotNull
private String userName;
//getters&setters
如果我将Account作为嵌套对象包含,我只需要ID就可以将其用作FK(帐户实体已经在DB中),但由于@NotNull注释我得到了Exception。
有没有办法在尝试保存对象Shop时忽略来自Account的注释,或者如何为Account创建不同的验证规则来验证其他属性而不是所有属性?
public class Shop {
private int id;
private Account owner; // only ID is needed
你有什么基本的例子吗?我不明白文档中的那些。我在发布之前已经阅读了文档。
答案 0 :(得分:1)
您希望查看Bean验证组,您可以在其中对特定验证进行分类,以便仅在验证该组时激活它们,否则将忽略它们。
有关详细信息,请参阅文档insert
。
以文档为例:
Default
一个组只不过是一个标记,它允许您在运行时根据特定用例启用/禁用验证。通过不在bean验证注释上指定// Age won't be validated since we didn't specify DriverChecks.class
validator.validate( driver );
// Age will be validated here because we specify DriverChecks.class
validator.validate( driver, DriverChecks.class );
属性,它默认为javax.persistence.validation.group.pre-persist
javax.persistence.validation.group.pre-update
javax.persistence.validation.group.pre-remove
组,如果在验证时未指定group-tag,则Bean Validation将使用该组。
这意味着以下情况属实:
select listagg(request_num,',') within group (order by request_num) as request_num,segmentation_name from (
select MST.REQUEST_NUM,seg_dtls.SEGMENT_NAME,LAST_UPDATED_date,seg_dtls.segmentation_name from
(select * from rp_sr_master ) Mst,
(select SUBSTR(ANSWER,1,INSTR (ANSWER, '~', 1)-1) AS SM_ID,sr_id from rp_sR_details
WHERE Q_ID in (SELECT Q_ID FROM RP_QUESTIONS WHERE field_id='LM_LRE_Q6')
) Dtls, (select SM_ID, SQL_STATEMENT, CREATION_DATE, UPDATED_DATE, SEGMENT_NAME,segmentation_name ,TOTAL_COUNT
from rp_sEGMENT_master ) seg_dtls
where Dtls.SM_ID=seg_dtls.SM_ID
and Dtls.sr_id=Mst.sr_id)
group by segmentation_name;
当您在服务方法中自行触发验证时,这非常有用,因为您可以根据该方法的用例手动控制哪些组检查适用。
当直接与Hibernate ORM的事件监听器集成时,它们也可以触发bean验证,组规范变得有点困难,因为必须根据hibernate引发的事件类型来指定它们。
(select SUBSTR(ANSWER,1,INSTR (ANSWER, '~', 1)-1) AS SM_ID,sr_id from rp_sR_details
WHERE Q_ID in (SELECT Q_ID FROM RP_QUESTIONS WHERE field_id='LM_LRE_Q6')
)
对于您可以在提供给Hibernate的JPA属性中指定的上述每个属性,您可以列出要为每个事件类型验证的以逗号分隔的组列表。这允许您在插入与更新和删除期间进行不同的检查。
如果这还不够,总有一个事实是您可以创建自己的约束验证器实现和注释以插入Bean Validation并在类或属性级别指定它。
我经常发现,在多个字段的值必须作为一个有凝聚力的单位进行验证,以证明其有效性的情况下,这是非常有用的,因为正常的逐字段验证是不够的。