1

これは私のユーザークラスです

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)を使用してDBからリコールすると。すべてのセット(idEventsなど)のnullをユーザーにロードします。

sienaモジュールとgaeモジュールでplay1.1を使用しています。

何が間違っている可能性があるかについてのアイデアはありますか?セットをパブリックとして宣言し、セットの代わりにリストを使用しようとしましたが、何も機能しませんでした。

ありがとう

4

1 に答える 1

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"

新しいバージョンのSienaをplayで使用していない場合(v1.0.0は現在Playでテストされています)、GAEにはJOINがなく、リンクされたエンティティを手動で取得する必要があるため、次のコードを使用します。

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

そこでグローバルに説明されています:http ://www.sienaproject.com/documentation-getting-started.html

Sienaは最近、大幅にリファクタリングされています。多くの新機能で改善され、強化されています。現在のバージョンはバージョン1.0.0_b2です。
近いうちに最終バージョン1.0.0を提供し、今よりも少しだけすべてを説明するためにたくさんのドキュメントを書くことを願っています;)

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2011-05-09T17:16:19.823 に答える