복붙노트

[SPRING] 최대 절전 모드 엔티티 저장시 일시적인 패턴 무시

SPRING

최대 절전 모드 엔티티 저장시 일시적인 패턴 무시

Hibernate 엔티티를 저장하고 (올바르지 않은) 일시적인 패턴을 무시하는 방법.

예 :

@Entity
@Table(name="`REQUEST`")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="`receiver`",discriminatorType=DiscriminatorType.STRING,length=20)
public abstract class Request implements UUIDAble{
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    @Transient
    @NotNull
    @Pattern(regexp="^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$")
    private String vaucher;

@Enumerated(EnumType.STRING)
@Column(name="name",nullable=false)
private RequestName name;

public RequestName getName() {
    return name;
}
public void setName(RequestName name) {
    this.name = name;
}

public String getVaucher() {
    return vaucher;
}
public void setVaucher(String vaucher) {
    this.vaucher = vaucher;
}
}

나는 그것을 저장하고 싶다 :

Request request = new Request();
request.setVaucher("123");
request.setName(RequestName.SYSTEM);

봄 생성 오류 :

javax.validation.ConstraintViolationException: validation failed for classes [ru.icb.cpaclick.domain.OperatorCheckRequest] during persist time for groups [javax.validation.groups.Default, ]
    at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:132)
    at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:71)
    at org.hibernate.action.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:159)
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:65)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:705)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:693)

해결법

  1. ==============================

    1.http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html_single/#validator-checkconstraints-orm을 참조하십시오. 기본적으로, Hibernate (ORM)은 디폴트 밸리데이션 그룹의 모든 제약 조건을 검사한다. 따라서이 특정 제약 조건을 다른 그룹에 넣을 수 있습니다.

    http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html_single/#validator-checkconstraints-orm을 참조하십시오. 기본적으로, Hibernate (ORM)은 디폴트 밸리데이션 그룹의 모든 제약 조건을 검사한다. 따라서이 특정 제약 조건을 다른 그룹에 넣을 수 있습니다.

    유효성 검사 그룹에 대한 설명은 http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html_single/#validator-usingvalidator-validationgroups를 참조하십시오.

  2. ==============================

    2.hibernate validator의 그룹 기능을 사용하고 transient 필드에 지정된 유효성 검사 제약 조건에 다른 그룹을 할당해야합니다.

    hibernate validator의 그룹 기능을 사용하고 transient 필드에 지정된 유효성 검사 제약 조건에 다른 그룹을 할당해야합니다.

    이러한 제약 조건을 사용하려면 그룹을 구체적으로 언급해야합니다. 디폴트로, Hibernate는 엔티티를 저장하려고 시도 할 때 모든 검증을 기본 그룹의 일부로 검사 할 것이다.

  3. from https://stackoverflow.com/questions/7267028/ignore-transient-pattern-on-save-hibernate-entity by cc-by-sa and MIT license