2011-01-31 17 views
1

これは私が対象と平日の間に1対多の関係accross来て二度目であると私は最善の方法でそれをモデル化していた場合、私はわからない:モデル複数の日

@Entity 
MyObject { 
    private int id; 
    private String foo; 
    private boolean monday; 
    private boolean tuesday; 
    private boolean wednesday; 
    private boolean thursday; 
    private boolean friday; 
    private boolean saturday; 
    private boolean sunday; 
} 

誰かがこれを行う良い方法を見つけましたか?

私の要件は、例えば月を複数の日をチェックする必要がすなわちない、現在の曜日に合わせデシベルからMyObjectのすべてのインスタンスを取得するためにある= 1 & &火=

答えて

3

1有限のモデル化セット内のアイテムの数は、通常はenumを使用することをお勧めします。

public enum DayOfWeek { 
    Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday 
} 

あなたはそうのようなあなたのクラスでこれを使用する可能性があります:

class YourClass { 
    private Set<DayOfWeek> activeDays; 

    public void addActiveDay(DayOfWeek day){ 
     activeDays.add(day); 
    } 
} 
... 

yourclass.addActiveDay(DayOfWeek.Friday); 
+0

as: 「MyObject {Set activeWeekdays}」? @ジェームス、正確に – James

+0

。私は使用法を示すためにいくつかの情報を追加します。 – jjnguy

+0

これはデータベースのオーバーヘッドのオーバーヘッドのようですか?参加する余分なテーブル、潜在的に7 varchar(9)。 – James

0

はいかが曜日の列挙型を作成し、適用可能な日を保存するプライベート配列を持っていますか?あなたが好奇心を得たい場合は、重複を防ぐ配列以外のいくつかの構造(例えば、Set、重複が許されないと思います)を持つことができます。

これをデータベースでも使用している場合、どのような種類のクエリを実行してデータを取得していますか、どのような種類のテーブル構造を使用していますか(列挙型ソリューションはすべてのデータベースで機能しない可能性があります)

+0

MyObjects(ID:int、FOO:varchar、MONDAY:ビット、TUESDAY:ビット... SUNDAY:ビット) 'テーブルでMysql/InnoDbを使用し、次に' MONDAY = 1'のクエリを実行します。 – James

+1

@James :MySQLにはEnumがあり、Javaと互換性があるようです(私は自分で試しませんでしたが):http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-type-conversions。 html ...これはあなたの既存のテーブルとクエリを変更する必要があります。 – FrustratedWithFormsDesigner