Własny walidator, metoda update. Spring MVC + Hibernate

0

Cześć, stworzyłem walidator @Unique, który stosuje w moich modelach :) Oto on:

Unique.java

@Documented
@Constraint(validatedBy = UniqueValidator.class)
@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Unique {
    String message() default "must be unique";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    Class<?> entity();
    String property();
}

UniqueValidator.java

public class UniqueValidator implements ConstraintValidator<Unique, Serializable> {

    @Autowired
    private SessionFactory sessionFactory;

    private Class<?> entityClass;
    private String uniqueField;

    public void initialize(Unique unique) {
        entityClass = unique.entity();
        uniqueField = unique.property();
    }

    @Transactional
    public boolean isValid(Serializable property, ConstraintValidatorContext cvContext) {
        Criteria crit = sessionFactory.getCurrentSession().createCriteria(entityClass);
        crit.add(Restrictions.eq(uniqueField, property));
        return crit.list().isEmpty();
    }
}

Chciałem go zastosować w modelu User, a konkretnie dla pola:

@NotEmpty
@Unique(entity = User.class, property = "username")
private String username;

Wszystko jest ładnie walidowane przy tworzeniu użytkownika - nie pozwoli na utworzenie takiego drugiego użytkownika o tej samej nazwie. W swoim systemie mam jednak również możliwość edycji danych użytkownika przez administratora i tutaj mam kłopot, gdyż w walidując formularz edycji walidator nie przepuści mnie również dalej :/

I tutaj pytanie... czy jest możliwość, aby walidator UniqueValidator zadziałał tylko przy metodzie persist(), a przy merge() już nie??
Chyba, że jest jakiś fajniejszy sposób na rozwiązanie tego problemu. Bardzo proszę o poradę :)

0

Wez z contextu obiekt uzytkownika i zrob ifa na idika.

0
Szczery napisał(a):

Wez z contextu obiekt uzytkownika i zrob ifa na idika.

Dzięki za odpowiedź, ale niezbyt rozumiem zamiar, czy mógłbyś mi to w jakiś sposób przybliżyć?? :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1