2011-06-30 8 views
3

私のgrailsでスプリングセキュリティプラグインを使用しています。私は独自のPhysicianクラスを生成してスプリングユーザークラスを拡張しました。アプリを実行すると、代わりにデータベースに医師テーブルが表示されません。ユーザークラスは、 Domain..Iは...医師のための別のテーブルを持っている必要があります GrailsでSpring Security User Classを拡張するには?

私はUser.findAll()入れ私のアウトされると、ユーザーテーブル内のすべてのユーザーを見つけることを試みる

[com.HospitalManagement.User :1、com.HospitalManagement.User:2、com.HospitalManagement.User:3、com.HospitalManagement.User:4、com.HospitalManagement.User:5、com.HospitalManagement.User:6、com.HospitalManagement.User:7 、com.HospitalManagement.User: 8、com.HospitalManagement.User:9]

が、私は、ユーザー名や他の医師のプロパティ値を期待していた。..

は、すべてのボディは、問題が何であるかを理解する私を助けることができます。デフォルトでは、ドメインクラスがある

package com.HospitalManagement 

class Physician extends User{ 

    static constraints = { 
    } 

    String specilty; 
    String MobileNo; 
    String Physician_Address; 
    String clinicals; 


} 
+0

ドメインクラスコードを示してください。 –

+0

ドメイン – laxmi

答えて

6

は、GORMは継承して、ドメインクラスのテーブルごとの階層モデルを使用しています。親クラスのすべてのフィールドと各サブクラスのすべてのフィールドは、単一のテーブルに格納されます。

この機能を無効にする場合は、tablePerHierarchyマッピングパラメータを使用できます。このパラメータをfalseに設定すると、親クラスのフィールドが共通の親テーブルに置かれ、各サブクラスのフィールドがそれぞれのテーブルに格納されます。これにより、クエリには結合があるため、クエリの効率が少し低下する可能性がありますが、継承ツリーが小さければ、その差はごくわずかです。あなたが持っている各サブクラスをしたい場合は

package com.HospitalManagement 

class Physician extends User { 

    static constraints = { 
    } 

    String specilty; 
    String MobileNo; 
    String Physician_Address; 
    String clinicals; 


    static mapping = { 
     tablePerHierarchy false 
    } 
} 

は、より多くの情報のためのGrailsのマニュアルを参照してください:ここでは、それはあなたのドメインクラスで次のようになりますそれは、親クラスのすべてのフィールドとサブクラスのすべてのフィールドを含む独自のテーブルです。次に、親クラスを定義できますgrailsが別のテーブルを作成するのを防ぐはずです。 Grailsは、抽象的なドメインクラスではなく、具体的なドメインクラス用のテーブルを作成するだけです。 [Source]

あなたのユーザークラスは、このようになり、その後になります。私はそれは春のセキュリティ上の必要がある場合がありますどのような影響を与えるかわからないけれども

abstract class User { 
    String username 
    String password 
    //etc... 
} 

これは、正しくテーブルを構築します。 Userクラスの抽象クラスを作成した後にSpring Securityエラーが発生した場合は、階層ごとのテーブルを無効にして、結合を処理することに戻ります。

+0

を投稿しました** tablePerHierarchy false **サブクラステーブルを作成しますが、基本クラスフィールドの列はそこにありません。 – laxmi

+0

Quarfoth:tablePerHierarchyをfalseにすると、サブクラステーブルが作成されますが、基本クラスのフィールドカラムはそこにありません。 – laxmi

+0

申し訳ありませんが、私はあなたの質問を理解するとは思わない。私は私の答えを更新しました。底のビットがあなたの質問に答えるかどうかを見てください。 –

0

オブジェクトの属性を表示しようとしているようです。おそらく、あなたは自分のPhysicianクラスのtoString()を上書きしたい:そのような

package com.HospitalManagement 

    class Physician extends User{ 

     static constraints = { 
     } 

     String specilty; 
     String MobileNo; 
     String Physician_Address; 
     String clinicals; 

     String toString() { 
      "specilty: $specilty, MobileNo: $MobileNo, Physician_Address: $Physician_Address, clinicals: $clinicals" 
     } 
    } 

か何かを、あなたは出力をフォーマットしたいかによって異なります。

関連する問題