2011-05-09 103 views
1

工作這是我的User類玩GAE持久不設置<Long>

public class User extends Model { 

@Id 
public Long id; 

public String nome; 
public String email; 
public String webId; //ID of the user in the provider website 
public String passwordHash; 
public String service; 

//Relazioni 
private Set<Long> idEvents = new HashSet<Long>(); 
... 
private Set<Long> idPhotos= new HashSet<Long>(); 


public User(String email, String name,String webId, String passwordHash, String service) throws Exception { 
    ... 
} 

static Query<User> all() { 
    return Model.all(User.class); 
} 

public static User findByEmail(String email){ 
    return all().filter("email", email).get(); 
} 
} 

當我創建它並將其插入到它似乎很好地工作數據庫。但是當我使用findByEmail(email)從數據庫中調用它時。它加載一個用戶所有的集合(如idEvents)的空值。

我使用1.1和siena和gae模塊一起玩。

有什麼想法可能是錯的?我試着公開宣佈集合,並使用列表而不是集合,但沒有任何工作。

謝謝

回答

3

我是錫耶納的首席開發人員,問題來自您的模型。 你不能像這樣聲明你的關係。

首先,你是否希望你使用JSON序列化將idEvents和idPhotos直接存儲到你的對象中? 如果是的話,你應該使用@Embedded:

@Embedded 
public List<Long> idEvents; 

在這種情況下,idEvents自動檢索,當你做:

List<User> users = User.all()...fetch(); 

如果沒有,你應該使用自動查詢,這是簡單的方法來設計錫耶納的Many2One關係。基本上,你將創建用戶和事件之間的關係(我想你已經有這個類)

@Filter("owner") 
public Query<Event> events; // this is called an "automatic-query" 

如果你不使用錫耶納的新版本遊戲(V1.0.0是測試採用了時下游戲),你會因爲是在GAE沒有JOIN使用下面的代碼,你必須手動獲取鏈接實體:

User user = someUser(); 
List<User> theEvents = user.events.fetch(); 

它在全球範圍解釋有:http://www.sienaproject.com/documentation-getting-started.html

錫耶納深深重構那些最後的日子:它正在改進,也增強了許多新功能。當前版本是1.0.0_b2版本。
我希望我們會盡快發佈最終版本1.0.0,並寫出大量文檔來解釋一切,比現在好一點;)

如果您有任何問題,請不要猶豫,問我!

+0

非常感謝,幫助! – 2011-05-10 15:11:17

+0

不客氣!密切關注錫耶納,它應該很快發展;) – mandubian 2011-05-10 15:52:59

+0

又一件事情..我可以使用具有多個字段的實體的自動查詢嗎? (事件有一個User和一個Place字段,在這種情況下,當我做user.events.fetch()時,它總是返回一個空的List)。 – 2011-05-10 16:03:17