2013-01-04 48 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

非常感謝您匹配! –