2012-04-18 69 views
0

如果我有這樣的存儲在App Engine的大表定義的實體:ID生成存儲實體(應用引擎)

@Entity 
@Table(name = "users") 
public class User implements Serializable{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id", nullable = false) 
    private Long id; 
    private String username; 
    private String password; 
    private String encryptedPassword; 
    private String creationDate; 
    private String modificationDate; 
    private Boolean validated; 

     // Code omitted 
} 

如果我有另外一個實體與另一個表註釋說,@Table(name = "profile")會每個實體Id相互獨立。例如,有一個用戶實體,其id爲0,Profile實體的id爲0.

我的意思是因爲實體存儲在一個「大表」中,所以順序Id將分配給所有存儲的實體。添加這樣的註解是否解決了這個問題,讓實體擁有獨立的id序列?

我試圖完成的是每個實體都有自己的Id,從0開始到n,每個實體類型都有自己的序列,例如用戶實體將從零開始依次爲Long類型,並且Profile實體也以0開頭。

回答

0

不,各種都有自己的ID序列,可能會重疊。你可以使用allocate_ids API來分配唯一的ID,但是請注意,這仍然不允許你在不知道它們的種類的情況下查詢實體(我認爲這是你爲什麼要這樣做),因爲你必須查詢每一個善良地找到包含你的ID的人。

+0

你的意思是「哪些可能重疊」,你的意思是對於每個實體類型ID可能重疊,或者對於每個實體都有獨立於其他實體類型的ID序列? – xybrek 2012-04-19 12:13:53

+0

@xybrek我的意思是說你可以擁有ID爲1的用戶,ID爲1的用戶。 – 2012-04-19 13:09:32

0

是的,無論你有多少實體,自動生成的id或序列總是獨立的,在PostgreSQL的情況下,如果你將數據類型設置爲bigint,那麼你必須手動在數據庫中創建一個序列,它作爲一個bigserial而不需要在該表的db服務器中明確地創建序列。享受.........

+0

我忘了定義,我正在使用應用程序引擎來存儲數據,在其大表上,您的答案仍然適用於應用程序引擎? – xybrek 2012-04-18 07:06:03

+0

抱歉不知道appengine,但確認序列是獨立的。 – deepmoteria 2012-04-18 07:10:54

+0

我剛剛用我的代碼單元測試證實,每種類型的實體都有自己的自動生成序列號,以1開頭 – xybrek 2012-04-18 15:45:42

相關問題