2009-05-20 2 views
3

ID 열 설정 가능한 I는 MySQL을 사용하고 다음과 같은 기업이있어 : 그러나JPA : 모두 자동 및 수동으로

class MyEntity { 
    @Id 
    @GeneratedValue(strategy=IDENTITY) 
    @Column(name="id") 
    private Integer id; 
} 

을, 나는 아직도 수동으로 ID를 설정할 수 있도록하고 싶습니다!

문제는 INSERT가 절대로 id 열을 삽입하지 않는다는 것입니다.

MyEntity e = new MyEntity(); 
e.setId(15); 
em.persist(e); 
em.flush(); 
em.refresh(e); 

다음 쿼리가 될 것이다 :

INSERT INTO myEntities (col1, col2, col3) VALUES (?, ?, ?) 
SELECT id, col1, col2, col3 FROM myEntities WHERE (id = 15) 

을 이같이 ID는 여전히 자동으로 생성되며 EntityNotFoundExceptionrefresh() 것 결과, 예를 들어, 때 이 일.

@GeneratedValue을 설정하지 않으면이 경우는 인데도 작동하지만 값이 자동 생성되면 LAST_INSERT_ID()은 호출되지 않습니다.

id 열을 수동으로 설정할 수도 있고 을 MySQL에서 자동으로 설정할 수도 있습니까?

답변

0

, 수동으로 할당 ID를 표 기반 시퀀싱 및 SEQUENCE 객체 시퀀싱을 위해 일하지만 IDENTITY와 것입니다.

2

JPA는 해당 시나리오를 처리하지 않으며 (JDO도 마찬가지 임); 그것은 여러분이 직접 id를 설정하거나 제공된 생성자를 사용하여 생성한다고 가정합니다. DataNucleus은 "id"값을 설정하지 않았을 때 @Extension (key = "strategy-when-notnull", value = "true") 값을 생성하여 확장자를 추가하고 다음 값을 사용합니다. if 당신이 그것을 제공했습니다. 어쩌면 다른 구현은 비슷한 것을 허용 할 것인가?

--Andy (DataNucleus)는 EclipseLink와

+0

고마워, 그거 알아두면 좋을거야. JPA 2에서 이것을 변경할 계획이 있는지 알고 계십니까? –