2011-12-07 3 views
2

1.2.4에서 UniqueCheck가 추가 된 것을 보았습니다. 어느 쪽이 정말로 굉장한가! Howerer, 수퍼 클래스 및 구현 클래스에서 사용하는 것과 관련하여 문제가 발생합니다.PlayFramework의 수퍼 클래스에 대한 UniqueCheck?

예는 긴 포스트보다 더 나은 될 것입니다 :

@Entity 
@Inheritance(strategy= InheritanceType.JOINED) 
abstract class Utilisateur extends Model { 

    @Unique 
    public String email; 
.. 
} 

그리고 두 가지 구현 Candidat & ENTREPRISE 모두 확장 Utilisateur.

동일한 전자 메일을 가진 후보를 두 명 추가 할 수 없으며 같은 전자 메일을 가진 두 명의 Entreprise를 추가 할 수도 없습니다. 그러나 Entreprise 사용자와 동일한 이메일을 가지고있는 Candidat 사용자를 보유 할 수 있습니다!

나는 조금 더 깊은 디그로 결정이 발견 :

select count(entreprise0_.id) as col_0_0_ from Entreprise entreprise0_ inner join Utilisateur entreprise0_1_ on entreprise0_.id=entreprise0_1_.id where entreprise0_1_.email=? limit ? 

UniqueCheck은 선택 카운트 쿼리를 기반으로합니다.

괜찮아 보이지만 수퍼 클래스를 고려해서는 안되나요?

아이디어를 무시하는 방법에 대한 아이디어가 있으십니까?

답변

2

내가 잘못 읽은 경우를 제외하고 소스 코드가 시나리오를 다루지 않을까 걱정됩니다. 어떻게 든 엔티티가 데이터베이스의 일부 세부 사항을 공유하더라도 프로그램의 관점에서 볼 때 다른 클래스와 다른 범주의 객체입니다.

내가 볼 수있는 유일한 대안은 this 또는 this other 템플릿 중 하나를 다음 자신의 검증을 구현하는 것입니다 그들은 공통의 부모가 사실은 (. 동물, 새와 개에 대해 생각 만 한 날 수)가 제한을 공유하는 것을 의미하지 않는다 . 그것에서 당신은 데이터베이스에 대해 SQL 쿼리를 실행하고 결정할 수 있습니다.

뭔가 같은 :

Candidat.count(
    "select c from Candidat c, Enterprise e where c.email like (?1) and e.email = c.email", email); 

(경고!, 지금 그것을 테스트 할 수 없습니다 메모리 쿼리에서, 그것은 일부 오타가있을 수 있습니다)

을해야한다고 :)

관련 문제