2013-01-08 2 views
1

JPA를 사용하는 필드와 RequestFactory (GWT 2.5)가있는 최대 절전 모드에서 고유 한 값 제약 조건을 구현하려고합니다. 다른 제약 조건은 JSR303을 사용하여 구현되었으며 같은 방식으로 클라이언트에 위반 사항을보고하려고합니다 (ReceiveronConstraintViolation). 이해할 수 있듯이이 유형의 제약 조건을 구현하는 최선의 방법은 @Column 속성을 사용할 때 unique = true으로 설정하는 것입니다. 그런 다음 트랜잭션이 커밋 될 때 데이터베이스에 의해 적용되고 쿼리를 통해 고유성을 주장하는 것과 관련된 경쟁 조건이 발생하지 않습니다.RequestFactory로 ConstraintViolationException으로 인한 RollbackException 처리 방법

나는 메서드를 트랜잭션의 시작 및 커밋으로 래핑하기 위해 ServiceLayerDecorator을 구현하는 것에 대한 조언을했다. 고유성 제약 조건을 위반하면 커밋 작업이 RollbackException이됩니다.

일반 예외 대신 제약 조건 위반으로 클라이언트에 전파되도록이 예외를 처리하는 방법은 무엇입니까?

지금까지 SimpleRequestProcessor에서 확인할 수있는 것처럼 유효성 검사는 호출과 별도로 발생하며 이런 식으로 invoke의 오류를 전파하는 분명한 방법이없는 것처럼 보입니다.

답변

0

고유성 검사를 위해 사용자 지정 제약 조건을 구현할 수 있습니다. https://community.jboss.org/wiki/AccessingTheHibernateSessionWithinAConstraintValidator을 참조하십시오.

+0

제안 해 주셔서 감사합니다. 귀하의 접근을 고려했지만 경쟁 조건이 존재하여 수표가 성공할 수 있지만 다른 트랜잭션이 먼저 커밋되어 해당 필드에 대해 동일한 값을 작성했기 때문에 커밋이 실패합니다. 내가 케이크를 먹을 수만 있다면 먹어라. :) –

+0

정확히. 이 점에 관해서는 위키 페이지 자체에 대한 경고가 있습니다. 그냥 내가 너에게 그것을 지적했다. 이점은 물론 Bean 유효성 검사 만 처리한다는 것입니다. 한 부분을 Bean Validation으로 만들고 다른 데이터베이스 제약 조건을 실제로 케이크를 먹고 유지하기를 원한다면 ;-) – Hardy

+0

나는이 접근법을 결국 사용했다. 사용자가 뚜렷하지 않은 오류를 발견하고 재 시도하여 해당 항목이 고유하지 않은 경우 UX가 그렇게 나쁘지 않다고 생각합니다. –