2011-01-31 2 views
1

이 내가 객체와 주말 사이에 일 대 다 관계 건너 왔어요 두 번째 시간입니다 그리고 난 최선의 방법을 모델링하고있어 경우에 나는 확실하지 않다 :모델링 여러 일

@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; 
} 

누구든지이 작업을 수행하는 더 좋은 방법을 찾아 왔습니까?

내 요구 사항은 예를 들어 월을 여러 날짜를 확인 할 필요 즉 없습니다, 현재 요일과 일치하는 DB에서 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

다음으로 표시 : 'MyObject { activeWeekdays}'? – James

+0

@James, 정확하게. 사용법을 보여주기 위해 몇 가지 정보를 추가하겠습니다. – jjnguy

+0

데이터베이스에 훨씬 많은 오버 헤드가있는 것 같습니다. 참여할 추가 테이블, 잠재적으로 7 varchar (9). – James

0

방법에 대한 요일의 열거를 생성하고 적용 할 수있는 일을 저장하는 개인 배열을? 당신이 좋아 지길 원한다면 중복을 막는 배열 이외의 구조 (예 : Set, 중복이 허용되지 않는다고 생각할 수 있음)를 가질 수 있습니다.

또한 데이터베이스와 함께 어떤 유형의 쿼리를 실행하고 어떤 테이블 구조를 사용하고 있습니까 (열거 형 솔루션이 모든 데이터베이스에서 작동하지 않을 수 있음)?

+0

나는'MyObjects (ID : int, FOO : varchar, 월요일 : 비트, 화요일 : 비트 ... 일요일 : 비트) '라는 테이블과 함께 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