2014-03-26 4 views
0

자바 8개월 열거의 목록을 매핑하면과 같이 별도의 테이블에 java.time.Month의 목록을지도하는 것이 가능하다최대 절전 모드

@ElementCollection(targetClass = Month.class, fetch = FetchType.EAGER) 
@Enumerated(EnumType.STRING) 
@CollectionTable(name = "MyEntity_Months" 
     , joinColumns = @JoinColumn(name = "myEntity_id")) 
private List<Month> months; 

그 해결책의 문제점은 숫자 대신 연관된 MyEntity 각각에 대해 반복된다는 것이다하십시오 myEntity_Id와 값 MyEntity_Month 테이블을 생성한다. 위의 주석 구성에 대한 데이터베이스 뷰 :

데이터베이스에 12 개월 문자열 만 필요하도록 매핑 테이블을 통해 매핑 할 수 있습니까? 나는 Hibernate 4.3/JPA 2.1 btw를 사용하고있다.

+0

당신이 자바 8 무슨 상관이 명확히 수 (MyEntity_id BIGINT null이 아닌지를 null이 아닌 BIGINT months_id)? – skiwi

+0

java.time.Month는 Java 8 유형입니다. 어쩌면 Jadira Usertype과 같은 Java 8 Time Mapper를 사용하여이 특정 예제에 대한 해결 방법이있을 수 있습니다. – cbach

답변

1

java.time.Month 타입은 @Entity 어노테이션을 가지고 있지 않으므로, 이것은 hibernate에 의해 엔티티로 인식되지 않는다. 그런 다음

@Entity 
public class MyEntity { 

    @Id 
    private Long id; 

    @OneToMany(fetch = FetchType.EAGER) 
    private List<MonthWrapper> months; 
} 


@Entity 
public class MonthWrapper { 

    @Id 
    private Long id; 

    @Enumerated(EnumType.STRING) 
    private Month month; 
} 

당신이 create-drophbm2ddl.auto 속성 최대 절전 모드를 통해이를 실행하면 다음 다음 표 얻을 :

최대 절전 모드 당신이 MonthWrapper 같은 것을 소개하는 경우 원하는 테이블 매핑을 달성 할 수있다 : 테이블 MonthWrapper (null가 아닌 아이디 BIGINT, 달 VARCHAR (255), 기본 키 (ID)를) 만들

최대 절전 모드 : 테이블 MyEntity (아이디 BIGINT NOT NULL, 기본 키 (ID))

을 만들

최대 절전 모드 : 테이블 MyEntity_MonthWrapper 만들