2011-12-07 8 views
2

1.2.4でUniqueCheckが追加されました。どちらが本当に素晴らしいです! Howerer、スーパークラスや実装クラスで何らかの問題が発生しています。PlayFrameworkのスーパークラスのUniqueCheck?

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

    @Unique 
    public String email; 
.. 
} 

そして、2つの実装Candidat & ENTREPRISE Utilisateurを延長し、両方:

の例では、長い記事よりも良くなります。

同じメールを持つCandidatを2つ追加することはできません。同じメールを持つEntrepriseを2つ追加することもできません。 しかし、Entrepriseユーザーと同じ電子メールを持っているCandidatユーザーを持つことができます!

私は少し深くディグすることを決定し、この発見:UniqueCheckは、SELECT COUNTクエリに基づいています

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 ? 

を。

大丈夫ですが、スーパークラスを考慮する必要はありませんか?

これを回避する方法はありますか?

答えて

2

ソースコードがあなたのシナリオをカバーしてくれるのではないかと思います(誤解しない限り)。たとえエンティティがデータベース内のいくつかの詳細を共有していても、それらは異なるクラスでありオブジェクトの異なるカテゴリであるという観点から、何らかの意味をなさない。彼らは(飛ぶことができる動物、鳥や犬について考える。のみ1)共通の親は、彼らが制限を共有するという意味ではありません持っているという事実

私が見る唯一の選択肢はthisまたはthis otherテンプレートのいずれか、以下の独自のバリデータを実装することです。その中で、データベースに対してSQLクエリを実行し、決定することができます。

ような何か:それを行う必要があります:(メモリクエリから、今それをテストすることはできません、それはいくつかのタイプミスを有することができる警告!)

:)

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