문제

자바 열거에서 나온 DAO에 필드를 두는 것이 종종 유용합니다. 일반적인 예는 일반적으로 사용자를 "정상"또는 "관리자"로 특성화하는 필드가있는 로그인 DAO입니다. 최대 절전 모드에서는 다음 2 개의 객체를 사용 하여이 관계를 (반) 타입 안전 방식으로 표현합니다.

class User {
    String username;
    String passwd;
    UserType type;
}

class UserType {
    private enum Type {ADMIN, NORMAL};
    private String type;

    //Setters/Getters for Hibernate
    public void setType(String type);
    public String getType();

    //Setters/Getters for user
    public void setUserType(UserType.Type t);
    public UserType.Type getUserType();

    public static UserType fromType(UserType.Type t);
}

이것은 작동하지만 사용자 유형 클래스가 불공평하고 몇 가지 값을 저장하기 위해 너무 많은 관료주의가 필요하다는 것을 알게됩니다. 이상적으로, 최대 절전 모드는 열거 된 필드를 직접 지원하고 열거 값을 저장하기위한 추가 테이블을 만들어야합니다.

내 질문은 : 최대 절전 모드에서 열거 클래스를 직접 매핑 할 수있는 방법이 있습니까? 그렇지 않다면, 열거를 표현하기위한 나의 패턴이 충분히 좋습니까? 사람들은 어떤 패턴을 사용합니까?

도움이 되었습니까?

해결책

최대 절전 모드 또는 JPA 주석 사용 :

class User {
   @Enumerated(EnumType.STRING)
   UserType type
}

사용자 유형은 표준 Java 5 열거입니다.

이것이 단지 주석으로 제한되어 있다고 상상할 수는 없지만 실제로 HBM 파일 로이 작업을 수행하는 방법을 모르겠습니다. 그것은 매우 버전 의존적 일 수 있습니다. 나는 추측하고 있지만 최대 절전 모드 3.2+가 필요하다고 확신합니다.

편집 : HBM에서는 가능하지만 약간 지저분합니다. 포럼 스레드

다른 팁

최대 절전 모드 문서에서 : http://www.hibernate.org/272.html

각 열거에 대한 새 typedef를 만들고 속성 태그에서 typedef를 참조 할 수 있습니다.

예제 매핑 - 인라인 <type> 꼬리표

  <property name='suit'>
    <type name="EnumUserType">
      <param name="enumClassName">com.company.project.Suit</param>
    </type>
  </property>

예제 매핑 - 사용 <typedef>

  <typedef name="suit" class='EnumUserType'>
      <param name="enumClassName">com.company.project.Suit</param>
  </typedef>

  <class ...>
    <property name='suit' type='suit'/>
  </class>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top