2013-01-04 44 views
0

我想使用GWT与RequestFactory和DataNucleus(与MySQL的JPA),但我无法编译它。gwt - 数据与jpa和rdbms datanucleus requestfactory

的错误是在代理类很奇怪:UserProxy.java:12:找不到类似长的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(); 

} 



} 
+0

所以如果它在编译时与DataNucleus或JPA无关;它们不会在运行时调用 – DataNucleus

回答

0

我期望自动装箱处理代理中的“public long getId()”和DTO中的“public Long getId()”之间的区别,但也许你可以尝试改变它们,以便它们都返回“长“或两者都返回”长“。

+0

如果'getId()'返回'null',你会期望什么行为? 'NullPointerException'?在序列化时在服务器上?或反序列化时在客户端上? –

+0

我当然不会指望'getId()'有空;就我所期望的RF而言,如果存在一个空值......我不会有任何期望,尽管我希望它能够采用任何最便宜的实现方法(即最小代码和努力RF开发人员)。 –

2

Longlong。选择一个或另一个,但在域名类和EntityProxy中都使用相同的名称。

+0

非常感谢您匹配! –