Hibernate 복합키 사용하기

less than 1 minute read

pk여러개 달아놓고 쓰는 방법

pk 순서를 정하는건 잘 안된다.

이 부분을 수정하려면 하이버네이트 코드 커스터마이징을 하던가 해야할듯하다.

@Data @Embeddable public class GameId implements Serializable {

/\*\*
 \* 
 \*/
private static final long serialVersionUID = -229826876863703005L;

@Type(type = "org.beansugar.tools.hibernate.JodaDateTimeUserType") //	@Column(name="GameTime", columnDefinition="CURRENT\_TIMESTAMP")
private DateTime          gameTime;
private String            username;
private String            gameCode; }

@Data @Entity @Table(name = “GAME_INFO”) public class GameInfo implements Serializable {

/\*\*
 \* 
 \*/
private static final long serialVersionUID = -8733838789326651901L;

@EmbeddedId
private GameId            id;

private boolean           callPut;
private float             price; }

위 코드로 생성을 하면 아래의 쿼리가 나온다.

CREATE TABLE `GAME_INFO` ( `gameCode` varchar(255) NOT NULL, `gameTime` datetime NOT NULL, `username` varchar(255) NOT NULL, `callPut` tinyint(1) NOT NULL, `price` float NOT NULL, PRIMARY KEY (`gameCode`,`gameTime`,`username`) )

pk순서가 time, code, name이면 좋겠는데… 이 부분이 조절이 잘 안된다. abc순서로 순서가 잡히는거라면 이름을 바꿔서 짓는것도 고려해봐야겠다.

특별히 제공하는 방법은 없는 것 같으니… 하이버네이트에서 어노테이션을 스캔하는 코드를 찾아서 상속받아서 수정하고 다시 쑤셔넣어주는게 좋을듯하다.

소스코드를 찾아서 재컴파일해서 lib폴더나 개인용 mavenrepo에 넣는것보다는… 낫지않을까 하는 생각이다.