2013-07-15 1 views
0

Учебник JEE6 (http://docs.oracle.com/javaee/6/tutorial/doc/gircz.html) предлагает JSR-303/Bean Validation следует использовать для проверки ввода - или, по крайней мере, это моя интерпретация.Должен ли я полагаться на базу данных для проверки атрибутов Hibernate?

Тем не менее, некоторые аннотации проверки бина, такие как @NotNull, могут оказаться не полезными на уровне проверки интерфейса, а скорее на уровне предварительной сохранности.

Например, рассмотрим следующий объект:

public class Registry { 

    @NotNull 
    String userName; 

    @NotNull 
    Date createdAt; 
} 

В этом случае, есть форма, на которой имя_пользователя заполняется самим пользователем. Но я не хочу, чтобы пользователь знал о дате создания реестра. Я хочу, чтобы мой backend установил его с текущей датой сервера.

Итак, я обычно привязываю этот объект к форме на странице и использую @Valid для проверки JSR-303. Но дело в том, что я не «createdAt», чтобы быть проверенным с помощью проверки Bean, я хочу, чтобы он был проверен только тогда, когда сущность будет сохранена Hibernate. Но, с проверкой Bean, оба атрибута получают подтверждение по запросу формы.

Как это можно найти? Предположил ли JSR-303 работать в таком сценарии? Должен ли я полагаться на проверку нулевой поля базы данных для атрибута «createdAt»?

Это сообщение очень много о том же номере, но я не нашел ни одного ответа там либо: Validation where to organize in web app for more efficient way

ответ

1

Назначьте ограничения на различные validation groups и утвердить одну группу по форме представленню (например, группа по умолчанию) и другой на предварительно сохраняются (например, группа проверки PrePersist:

@interface PrePersist {} 

public class Registry { 

    @NotNull 
    String userName; 

    @NotNull(groups = PrePersist.class) 
    Date createdAt; 
} 

Укажите группу, которые будут использоваться во время предварительного сохраняться, как это в вашем persistence.xml:

<persistence ...> 
    <persistence-unit ...> 
     ... 
     <properties> 
      <property 
       name="javax.persistence.validation.group.pre-persist" 
       value="com.example.PrePersist"/> 
     </properties> 
    </persistence-unit> 
</persistence> 
+0

прохладный! Я попробую! благодаря! – felipecao