1

次のように2つのクラスがあります。

@XmlRootElement
@PersistenceCapable(detachable="true")
public class User {

    @Persistent(primaryKey="true", valueStrategy=IdGeneratorStrategy.IDENTITY)
    private Long id;

    private String firstname;
    private String lastname;
    private UserDetails userDetails;
...
}

@XmlRootElement
@PersistenceCapable(detachable="true")
public class UserDetails {
    private String streetaddress;
    private String address;
    private String city;
    private int pincode;
    private Date dateofbirth;
...
}

示されているように、1 つの JAXRS 関数に userdetails を含めずに、ユーザー オブジェクトのみを取得する必要があります。

//UserManager.java
public List<User> getUsers() {
    javax.jdo.Query q = pm.newQuery("SELECT FROM "+ User.class.getName());
    List<User> users = (List<User>) q.execute();
    return users;
}

および JAXRS サービス:

@GET
@Produces({MediaType.APPLICATION_JSON})  
public List<User> getUsers() {        //Retrieves all users and user details
    UserManager um=new UserManager(); //working perfectly
    return um.getUsers();
}

@GET
@Produces({MediaType.APPLICATION_JSON})  
public List<User> getUsers() {        //should retrieve user only, but how?
    UserManager um=new UserManager();
    return ?????
}

UserDetails オブジェクトが 2 番目の関数の JAXRS および JAXB によって展開されないようにするにはどうすればよいですか?

4

2 に答える 2

0

JDO フェッチ プランとライフサイクル ポリシーの使用を組み合わせることができます。

userDetails の名前付きフェッチ グループを作成します。

@FetchGroup(name="details", members={@Persistent(name="userDetails")})

すべてが必要な場合は、JAXB がグラフをナビゲートしているため、技術的に何もする必要はありませんが、完全にするには、このフェッチ プランを指定し、返されるオブジェクトをフェッチ プランに従って一時的にします。

pm.getFetchPlan().addGroup("details");
[...]
return (List<User>)pm.makeTransientAll(um.getUsers(), true); // use fetch plan

浅いフェッチが必要な場合は、デフォルトのフェッチ プランを使用し、返されたオブジェクトを一時的にします。次に例を示します。

return (List<User>)pm.makeTransientAll(um.getUsers(), true); // use fetch plan

それが役に立てば幸い。

于 2013-01-29T18:31:41.093 に答える
0

両方の関数から同じ型を返す場合、jaxb は、1 つのメソッドから情報を隠して 2 番目に表示するのに役立ちません。

これを実現するには、次の 2 つの方法があります。

1) userdetails を集約しない 2 番目の関数から別のユーザー オブジェクトを返します。2) 2 番目の関数で、ユーザーの詳細データを入力しないクエリを記述します。

于 2013-01-28T09:38:20.207 に答える