0

私は次のクラスを持っています

@NamedQueries({
        @NamedQuery(name = "User.FindByFilter", query = "SELECT NEW myPkg.SimpleUser(u.name , u.email, u.roles) FROM User u WHERE UPPER(u.name) LIKE :filter AND  ORDER BY u.name")
 })
@Entity
@Table(name = "Users")
public class User implements Serializable, UserDetails {
    @Id
    private String email;
    @Basic
    private String name;
    @OneToMany(cascade = { CascadeType.REFRESH, CascadeType.PERSIST }, fetch = FetchType.EAGER)
    private Set<Authority> roles;
...
}

@Entity
public class Authority implements GrantedAuthority {
//just @Id and @Basic here no specific mapping back to user
...
}

もちろん、私はこのクエリが

@NamedQuery(name = "User.FindByFilter", query = "SELECT NEW myPkg.SimpleUser(u.name , u.email, u.roles) FROM User u WHERE UPPER(u.name) LIKE :filter AND  ORDER BY u.name")

間違ってu.rolesますので@OneToMany
だから私の質問は、役割フィールドをconstに渡す正しい方法は何ですか?

4

1 に答える 1

1

JPA 2.0 仕様から、 と を使用single_valued_object_fieldcollection_valued_fieldて、それぞれ単一のエンティティ フィールドとコレクション エンティティ フィールドを表します。

single_valued_object_fieldは、 1 対 1または多対 1 の関係にある関連フィールド、または組み込み可能なクラス タイプのフィールドの名前によって指定されます。single_valued_object_field の型は、関連するエンティティまたは埋め込み可能なクラスの抽象スキーマ型です。

collection_valued_field は、1 対多または多対多の関係の関連付けフィールドの名前または要素コレクション フィールドの名前によって指定されます。collection_valued_field の型は、関連するエンティティまたは要素型の抽象スキーマ型の値のコレクションです。

次に、SELECT 句の構文を次のように定義します。

  • コンストラクター式 ::= NEW コンストラクター名 ( コンストラクター項目 {, コンストラクター項目}* )

  • constructor_item ::= single_valued_pa​​th_expression | スカラー式 | 集約式 | 識別変数

constructor_item受け入れることができるsingle_valued_path_expressionができないように、コレクションフィールドパラメータを受け入れることができcollection_valued_fieldないと思います。new()

フェッチ結合を使用してインスタンスをそのコレクションとUser一緒 に取得し、手動で変換する必要がありますAuthoritymyPkg.SimpleUser

于 2012-12-28T05:12:42.710 に答える