글쎄 나는 이것이 효과가 있다고 생각하지 않는다. JPA는 자동으로 ID 값을 생성하며 @GeneratedValue
을 담당합니다. id 100을 가진 기존 엔티티가 이미 존재한다면 어떻게되는지 스스로에게 물어보십시오. 그리고 수동으로 100 'ID를 가진 새로운 엔티티를 생성합니다. 직관적으로 나는 JPA (또는 구현)가 expection을 던진다 고 말할 것이다.
나는 전혀 시도하지 않은 자신의 발전기를 (작성의 아이디어를 가지고 위의 답을 쓰는 동안은, 단지 유래 여기 아래로 코딩.
당신은 @GeneratedValue
주석
에 발전기의 자신의 구현을 전달할 수 있습니다
@Id
@GeneratedValue(startegy = GenerationType.IDENTITY, generator="generatedIdOrCustomId")
@GenericGenerator(name="generatedIdOrCustomId", strategy="GeneratedIdOrCustomId")
private Long id;
...
그리고 사용자 정의 구현은 다음과 같아야합니다
public class GeneratedIdOrCustomId extends IdentityGenerator {
@Override
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
if (((YourEntity) obj).getId() == null) {
// the id is null, let JPA create an id.
return super.generate(session, obj);
} else {
// the id is set and should not be generated by JPA.
return ((YourEntity) obj).getId();
}
}
하기는 M을 생성 ethod는 빠르고 지저분한 구현입니다. 이 경우에는 예를 들어 obj == null
을 확인하고 (Hibernate)Exception
을 던져야합니다.
"긴"필드를 '설정하지 않음'으로 설명하십시오. 그것이 긴 경우에 나는 아마 이해할 수 있었다, 그러나 길지 않았다. –