2011-12-07 38 views
2

我在1.2.4上看到添加了UniqueCheck。這真的太棒了! 但是,我在使用超類和實現類時遇到了一些問題。PlayFramework中超類的UniqueCheck?

一個例子會比長的帖子更好:

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

    @Unique 
    public String email; 
.. 
} 

和兩個實現Candidat &企業公司都伸到Utilisateur。

您不能添加兩個具有相同電子郵件的Candidat,也不能添加具有相同電子郵件的兩個Entreprise。 但是,您可以讓Candidat用戶使用與Entreprise用戶相同的電子郵件!

我決定到Digg深一點,發現這一點:

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是基於SELECT COUNT查詢。

看起來不錯,但不應該考慮超級班嗎?

任何想法如何繞過此?

回答

2

恐怕源代碼不會涵蓋你的場景(除非我誤讀了它)。不知何故,即使實體在數據庫中共享一些細節,從程序的角度來看,它們是不同類別和不同類別的對象。他們有一個共同的父,但這並不意味着它們共享限制(想想動物,鳥和狗,只有1可以飛)

我看到的唯一的選擇是實現以下兩種thisthis other模板自己的驗證。在這裏你可以對數據庫運行一個SQL查詢並決定。

喜歡的東西:

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

(警告:從內存中的查詢,現在不能測試它,它可能有一些錯字)

應該這樣做:)