죄송합니다.이 질문에 이미 질문이있는 경우 일부 기사를 읽었지만 대답을 찾지 못했습니다.문자열 기본 키 최대 절전 모드를 만드는 방법. @GeneratedValue strategies
내 목표는 고유 한 필드 IMEI가있는 엔티티 장치를 생성하는 것이며이를 기본 키로 사용하고 장치 등록시 지정합니다 (엔티티를 생성하는 동안 수동으로 지정됨). 개발을 위해 Spring roo 도구를 사용하고 ORM으로 최대 절전 모드로 전환합니다.
내가 엔티티 선언이 지정
:@RooJavaBean
@RooToString
@RooJpaActiveRecord(identifierField = "IMEI", identifierType = String.class)
public class Device {...}
나는이 생성 얻을.
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "IMEI")
private String Device.IMEI;
MySQL의 DB와 서버에 프로젝트를 배포하는 동안이 오류를
2013-03-17 20:03:23,136 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - HHH000389: Unsuccessful: create table device (imei varchar(255) not null auto_increment, model varchar(255), name varchar(255) not null, version integer, primary key (imei))
2013-03-17 20:03:23,136 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaExport - Incorrect column specifier for column 'imei'
을 얻을 그럼 난 루는
@Id
@GeneratedValue(generator = "org.hibernate.id.Assigned")
@Column(name = "the_code")
private String code;
으로 필드를 생성 우선
(나는 hear이 발견했습니다)여전히 오류가 발생하면 코드를이 코드로 간단히 변경했습니다.
@Id
private String IMEI;
그리고 잘 작동하고 엔터티를 저장하기 전에 imei 필드를 지정하도록 요청합니다.
내 질문 :
id로 사용자 정의 필드를 사용하는 것이 옳습니다.
는 확인
는 확인이 최대 절전 모드로 생성하지만 장치의 IMEI에서 가져온되지 않는 것입니다 문자열
에 의하여이다. 루는 작동하지 않습니다 (identifierType = String.class = "IMEI"identifierField) @RooJpaActiveRecord에 대한 코드를 생성하는 이유 을 org.hibernate.id.Assigned 무엇.
은 문자열의 자동 생성 할 가망 생성 primery 키기본 GeneratedValue 전략 값 (내 마지막 경우)
내가 official doc 읽을 수는 있지만 모든 것을 이해하지 않았다 기사에 저를 참조하시기 바랍니다 것은 무엇인가 어디에서 나는이 모든 것에 대해 읽었습니다.
감사합니다. 긴 질문을 드려 죄송합니다.
덕분에, 그것은 마법처럼 작동합니다! –
그러나 생성 된 ID가 이미 테이블에 있다면? ID가 안전하게 생성되었지만 ID가 테이블에있을 가능성은 적어도있을 수 있습니다. – user12458
UUID는 문서에서 언급 한 '불변의 보편적으로 유일한 식별자'입니다. –