0
내 Roo 모델에 대한 유효성 검사기가 있습니다.무한 유효성 검사 루프
오류를 발견하면 (false를 반환하면) 예상대로 작동합니다. 처음과 마지막 라인이 동일한 지
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:351)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:303)
at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:133)
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:136)
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:94)
at org.hibernate.action.internal.EntityInsertAction.preInsert(EntityInsertAction.java:181)
at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:81)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:369)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:286)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339)
at org.hibernate.event.internal.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:62)
at org.hibernate.internal.SessionImpl.autoFlushIfRequired(SessionImpl.java:1205)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1262)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:283)
at com.foo.domain.validate.UniqueNameValidator.isValid(UniqueNameValidator.java:30)
at com.foo.domain.validate.UniqueNameValidator.isValid(UniqueNameValidator.java:1)
at org.hibernate.validator.internal.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:308)
at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:180)
at org.hibernate.validator.internal.engine.ConstraintTree.validateConstraints(ConstraintTree.java:124)
at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:86)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:442)
at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:387)
참고 성공할 때
그러나, 제어기는 StackOverflowError
결과 무한 루프로 들어간다. 이 스택 추적은 스택 오버플로가 발생하기 전에 여러 번 반복됩니다.
내 UniqueNameValidator은 다음과 같습니다
public class UniqueNameValidator implements ConstraintValidator<UniqueFoo, Foo> {
public boolean isValid(Foo value, ConstraintValidatorContext context) {
TypedQuery<Long> q = ... // checks several conditions with other models in actual code
return q.getSingleResult() == 0;
}
}
내 루 MVC 컨트롤러는 다음과 같습니다
내 모델은 다음과 같습니다@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String create(@Valid Foo foo,
BindingResult bindingResult,
Model uiModel,
HttpServletRequest httpServletRequest) {
if (bindingResult.hasErrors()) {
populateCreateForm(uiModel, foo);
return "foos/create";
}
uiModel.asMap().clear();
foo.persist();
return Session.getStoredURI("/" + encodeUrlPathSegment(foo.getId().toString(), httpServletRequest));
}
:
@RooJavaBean
@RooJpaActiveRecord
@UniqueName
public class Foo {
@NotNull
private String parentName;
...
}
내가 잘못 뭐하는 거지 ?