我是JPA和GAE的新人。我试图将一些实体追溯到前端时遇到了一些问题。我复制mi实体代码:
@Entity
public class User implements Serializable{
private static final long serialVersionUID = -7949567692618870100L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private String userName;
private String email;
@OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL)
private List<User> friends;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Credential Credential;
//getters & setters
}
Credential实体仅包含userName并传递:
@Entity
public class Credential implements Serializable{
private static final long serialVersionUID = -3277842132830057420L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
private String userName;
private String pass;
//getters and setters
}
我使用GAE Eclipse插件生成UserEndpoint然后我添加了一个模拟Login的方法,这是方法:
@ApiMethod(name = "CredentialLogin")
public User CredentialLogin(@Named("pass") String pass,@Named("userName") String userName){
EntityManager mgr = getEntityManager();
Query query = mgr.createQuery("SELECT FROM User u WHERE u.email = :email");
query.setParameter("email", userName);
User user = null;
try {
user = (User) query.getSingleResult();
if (!user.getCredential().getPass().equals(pass))
//INVALID LOGIN
}
finally {
mgr.close();
}
return user;
}
调试代码我从数据存储中获取了正确的用户。做&#34; user.getCredential()&#34;凭据获取到用户实体。作为&#34;朋友&#34;当我返回User实体时,字段有LAZY取出我将显示为NULL(这就是我想要的)。
返回后我收到此错误:
&#34; com.google.appengine.repackaged.org.codehaus.jackson.map.JsonMappingException:您刚刚尝试访问字段&#34;朋友&#34;分离对象时,此字段未分离。要么不访问此字段,要么在分离对象时将其分离。&#34;
我不想把EAGER提取给我的朋友&#34;属性,因为列表可能非常大。 我不想删除我的朋友&#34; getter和setter方法,因为没有它们我无法访问该字段。
有人知道我该怎么做。
非常感谢
答案 0 :(得分:0)
您可以更改增强过程以调用侦听器,而不是在访问未分离字段时抛出异常。请参阅http://www.datanucleus.org/products/accessplatform_3_1/enhancer.html和“detachListener”选项