gwt-带datanucleus和jpa和rdbms的requestfactory

gwt-带datanucleus和jpa和rdbms的requestfactory,gwt,jpa,datanucleus,requestfactory,build.xml,Gwt,Jpa,Datanucleus,Requestfactory,Build.xml,我试图将GWT与RequestFactory和DataNucleus(JPA与MySQL)结合使用,但我无法编译它 代理类中的错误非常奇怪:UserProxy.java:12:找不到类似于long getId()的域方法 在我的域类User.java中,我有这样一个方法。 我想知道问题出在哪里 顺便说一句,如果有人能向我展示具有类似配置(不是GAE)和ant build.xml文件的项目,我将不胜感激 package com.test.shared; import com.test.domai

我试图将GWT与RequestFactory和DataNucleus(JPA与MySQL)结合使用,但我无法编译它

代理类中的错误非常奇怪:UserProxy.java:12:找不到类似于long getId()的域方法

在我的域类User.java中,我有这样一个方法。 我想知道问题出在哪里

顺便说一句,如果有人能向我展示具有类似配置(不是GAE)和ant build.xml文件的项目,我将不胜感激

package com.test.shared;

import com.test.domain.User;
import com.google.web.bindery.requestfactory.shared.EntityProxy;
import com.google.web.bindery.requestfactory.shared.EntityProxyId;
import com.google.web.bindery.requestfactory.shared.ProxyFor;

@ProxyFor(User.class)
public interface UserProxy extends EntityProxy {

public long getId();

public void setId(Long id);

public Integer getVersion();

public String getFirstName();

public void setFirstName(String firstName);

public String getLastName();

public void setLastName(String lastName);

public String getEmail();

public void setEmail(String email);

    EntityProxyId<UserProxy> stableId();

}



package com.test.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Version;
import javax.validation.constraints.NotNull;


@Entity
public class User {

@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Version
@Column(name = "version")
private Integer version; //require to persist

@NotNull
private String firstName;

@NotNull
private String lastName;

@NotNull
private String email;

public User() {
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public Integer getVersion() {
    return version;
}

public void setVersion(Integer version) {
    this.version = version;
}

// -----------------------

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

public String getLastName() {
    return lastName;
}

public void setLastName(String lastName) {
    this.lastName = lastName;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

// get EntityManager

public static final EntityManager entityManager() {
    return EMF.get().createEntityManager();
}

// implementing a service in an entity class

public static User findUserByEmail(String email) {
    if (email == null) {
        return null;
    }
    EntityManager em = entityManager(); 
    try {
        User user = em.find(User.class, email);
        return user;
    } finally {
        em.close();
    }
}

public void persist() {
    EntityManager em = entityManager();
    try {
        em.persist(this);
    } finally {
        em.close();
    }
}

public void remove() {
    EntityManager em = entityManager();
    try {
        User attached = em.find(User.class, this.id);
        em.remove(attached);
    } finally {
        em.close();
    }
}

@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("Id: ").append(getId()).append(", ");
    sb.append("Version: ").append(getVersion()).append(", ");
    sb.append("FirstName: ").append(getFirstName()).append(", ");
    sb.append("LastName: ").append(getLastName()).append(", ");
    sb.append("Email: ").append(getEmail()).append(";");
    return sb.toString();

}



}
package com.test.shared;
导入com.test.domain.User;
导入com.google.web.bindery.requestfactory.shared.EntityProxy;
导入com.google.web.bindery.requestfactory.shared.EntityProxyId;
导入com.google.web.bindery.requestfactory.shared.ProxyFor;
@ProxyFor(User.class)
公共接口UserProxy扩展EntityProxy{
公共长getId();
公共无效设置id(长id);
公共整数getVersion();
公共字符串getFirstName();
public void setFirstName(字符串firstName);
公共字符串getLastName();
public void setLastName(字符串lastName);
公共字符串getEmail();
公共电子邮件(字符串电子邮件);
EntityProxyId stableId();
}
包com.test.domain;
导入javax.persistence.Column;
导入javax.persistence.Entity;
导入javax.persistence.EntityManager;
导入javax.persistence.GeneratedValue;
导入javax.persistence.GenerationType;
导入javax.persistence.Id;
导入javax.persistence.Version;
导入javax.validation.constraints.NotNull;
@实体
公共类用户{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@版本
@列(name=“version”)
私有整数版本;//需要持久化
@NotNull
私有字符串名;
@NotNull
私有字符串lastName;
@NotNull
私人字符串电子邮件;
公共用户(){
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共整数getVersion(){
返回版本;
}
公共void setVersion(整数版本){
this.version=版本;
}
// -----------------------
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
//获取实体管理器
公共静态最终EntityManager EntityManager(){
返回EMF.get().createEntityManager();
}
//在实体类中实现服务
公共静态用户findUserByEmail(字符串电子邮件){
如果(电子邮件==null){
返回null;
}
EntityManager em=EntityManager();
试一试{
User=em.find(User.class,email);
返回用户;
}最后{
em.close();
}
}
公共图书馆{
EntityManager em=EntityManager();
试一试{
坚持(这个);
}最后{
em.close();
}
}
公共空间删除(){
EntityManager em=EntityManager();
试一试{
User attached=em.find(User.class,this.id);
em.移除(附加);
}最后{
em.close();
}
}
@凌驾
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
sb.append(“Id:”).append(getId()).append(“,”);
sb.append(“版本:”).append(getVersion()).append(“,”);
sb.append(“FirstName:”).append(getFirstName()).append(“,”);
sb.append(“LastName:”).append(getLastName()).append(“,”);
附加(电子邮件:).append(getEmail()).append(;);
使某人返回字符串();
}
}

Long
不是
Long
。选择一个或另一个,但在域类和EntityProxy中使用相同的方法,我希望自动装箱能够处理代理中的“public long getId()”和DTO中的“public long getId()”之间的差异,但也许您可以尝试更改它们,使它们都返回“long”或都返回“long”.

因此,如果是在编译时,则与DataNucleus或JPA无关;在运行时之前不会调用它们如果
getId()
返回
null
,您会期望什么行为<代码>空点异常?序列化时是否在服务器上?或者在反序列化时在客户端上?当然,我不希望从
getId()
中得到null;至于我所期望的射频,如果有一个空。。。我不会有固定的期望,虽然我希望它将采取任何最便宜的实现过程(即,射频开发人员的最低代码和工作)。