2012-11-13 3 views
3

일부 답변을 이미 살펴 보았지만 충분히 만족스럽지 않습니다. 나는 이것이 중복되지 않기를 바란다.데이터베이스 지원 모범 사례가 적용된 Java 열거 형

나는 상수이어야하는 데이터가있는 응용 프로그램이 있습니다. 이 데이터는 나중에 수정할 수 있으므로 현재의 접근 방식은 다른 테이블에서 참조되는이 상수와 별도의 테이블을 사용하고있었습니다. 이 테이블에는 열 ID와 예를 들어 값 열이 있습니다. 그리고이 테이블은 ID와 Value를 가진 Java 객체로 표현됩니다.

이 상수를 비교할 때 문제가 발생합니다. ID를 사용하여 비교하는 것은 나에게보기 흉한 것처럼 보이므로 열거 형을 사용하여 비교합니다. 그러나 이것은 "유형"으로 사용되는 클래스 내에서 ENUM을 사용하기 때문에 어색한 것으로 보입니다. 그래서 JPA의 @enumerated annotation에서도 생각하고 있었지만 솔직히 그렇게 할 수있는 최선의 방법은 없습니다. 확실한 점은 DB에 저장된이 일정한 데이터를 분명히 원한다는 것입니다.

답변

2

내 머리 위로 나는 다음과 같은 접근 방식에 대해 생각할 수 있습니다.

  1. enum을 만들고 DB에 이름을 매핑하십시오. 이 방법은 간단하며 효과적입니다. 단점은 DB에 너무 많은 문자열이 있다는 것입니다. 따라서 열거 형 요소 이름이 변경되면 DB를 수정해야합니다. 문자열은 공간을 차지합니다. 그리고 이러한 필드는 쿼리 기준에 사용하려는 경우 인덱싱이 필요합니다.
  2. enum을 만들고 그 서수를 DB에 매핑하십시오. 이것도 간단하지만 열거 형 요소의 순서가 변경 되더라도 유지 관리가 필요합니다. 그리고 DB 데이터는 읽기 쉽지 않습니다.

# 1과 # 2 모두 공통적으로 단점이 있습니다. 실제로 데이터는 열거 형으로 하드 코딩 된 두 번 저장됩니다. DB에 두 번. 데이터를 수정해야한다면 2 개 장소에서해야합니다. enum을 다시 컴파일해야하기 때문에 개발 중에 수정 작업을 수행해야합니다.

그러나 "동적 열거 형"을 제공하는 다른 solution이 있습니다. 보세요. 아마도이 솔루션이 도움이 될 것입니다. 나중에 수정할 수 있습니다

0

데이터는 더 이상 상수하지만 변수입니다 ... ;-)

어쨌든 : 가능한 값의 목록은 시간이 지남에 따라 변경 할 수 있다면, 내가 열거 형과를 사용하여 문제를 볼 @ 열거 된 JPA 주석.

값 자체를 변경할 수있는 경우 비교를 위해 ID를 사용하지 않으려면 이름/값 매핑이 필요합니다. 열거 형에 "속성"을 추가 할 수도 있습니다.이 속성은 데이터의 변수 부분에 사용할 수 있습니다. 그렇게하면 열거 형의 이름 만 데이터베이스에 상수 문자열로 저장되고 (식별자로 사용) 코드에서 값이 변경 될 수 있습니다.

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html