### 개발환경
* Hibernate 4.2.0.Final
### 문제발생 원인
* @Entity 선언 객체를 정렬하려는 영도로 interface Compare<T>를 구현한 후
int compareTo(Object o) 에서 사용하려는 비교값 필드로 order 을 정의했다.
@Entity
@Table(name="SAMPLE")
public class Sample implements Serialize, Compare<Sample> {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Getter
private Long order;
@Override
public int compareTo(Sample o) {
return getOrder().compareTo(o.getOrder());
}
}
이렇게 정의된 엔티티 객체의 테이블이 생성되지 않는 문제가 발생해서, 이를 해결하기 위해서 여러가지를 시도해봤다. 복사해서 새로운 엔티티 객체를 만들어보고, 객체의 참조관계를 변경해보고, 클래스명을 바꿔보고 하이버네이트 버전을 변경해봤지만 증상은 동일했다.
이를 확인하기 위해서 구현하는 과정을 한단계한단계 되짚어보았다. ㅠㅅ-) 그러다가 발견했다.
새로 만들어서 id 값을 넣었을 떄까지는 이상없이 생성이 되다가,
private Long order;
이 필드를 넣는 순간부터 구현되지 않는 것을 발견했다.
### 해결방법
* order -> seq 로 변경
필드명을 seq로 변경하고 나니... 정상적으로 테이블이 생성되는 것을 확인했다.
### 보충 설명
다른 분이 알려주신 것을 보고 생각했다.
'아, order가 hibernate와 관련된 예약어가 아니라 database와 관련된 예약어...였어.'
Entity 객체의 필드명을 지정할 때 Database의 예약어를 사용하지 않도록 하자. 반드시 도메인의 필드명으로 사용해야 한다면, @Column(name="")을 이용하여 테이블의 컬럼명을 다른 것으로 변경하자.