對不起,如果這個問題已經被問到,我讀過一些文章,但沒有找到答案。如何使字符串主鍵休眠。 @GeneratedValue策略
我的目標是創建具有唯一字段IMEI的實體設備,並且我想將其用作主鍵,並在設備註冊時指定它(手動指定,同時創建實體)。 我使用Spring roo工具進行開發,並使用hibernate作爲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數據庫部署項目的服務器我得到這個錯誤
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服用。
什麼org.hibernate.id.Assigned
爲什麼袋鼠的@RooJpaActiveRecord(identifierField = 「IMEI」,identifierType = String.class)不起作用生成的代碼。
是更多鈔票來創建字符串自動生成primery關鍵
什麼是默認GeneratedValue戰略價值(我最後的情況下)
我讀過official doc,但沒有理解所有,請參考我第我岑讀了這一切。
謝謝,對不起長時間的問題。
謝謝,它的工作原理就像一個魅力! – 2013-12-30 19:25:47
但是如果生成的ID已經存在於表中呢?雖然,這個ID是安全生成的,但至少有一個機會可以讓這個ID出現在表格中? – user12458 2014-07-10 17:58:17
正如文檔所述,UUID是一個「不可變的通用唯一標識符」。 – 2014-07-23 07:42:40