2013-01-04 1 views
0

J'essaie d'utiliser GWT avec RequestFactory et DataNucleus (JPA avec MySQL) mais je ne peux pas le compiler.gwt - requestfactory avec datanucleus avec jpa et rdbms

L'erreur est très étrange dans une classe proxy: UserProxy.java:12: Impossible de trouver la méthode de domaine similaire à longue getId()

Dans ma classe de domaine User.java j'ai une telle méthode. Je me demande où est le problème !!!

BTW J'apprécierais que quelqu'un puisse me montrer le projet avec une configuration similaire (pas avec GAE) et un fichier 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

Donc, si c'est au moment de la compilation alors rien à voir avec DataNucleus ou JPA; ils ne sont pas invoqués jusqu'à l'exécution – DataNucleus

Répondre

0

Je voudrais attendre autoboxing pour prendre soin de la différence entre "public long getId()" dans le proxy et "public Long getId()" dans le DTO, mais peut-être que vous pourriez essayer de les changer long "ou les deux reviennent" Long ".

+0

Quel comportement attendez-vous si 'getId()' renvoie 'null'? 'NullPointerException'? sur le serveur lors de la sérialisation? ou sur le client lors de la désérialisation? –

+0

Je ne m'attendrais pas à une valeur nulle de 'getId()', bien sûr; en ce qui concerne ce que je m'attendrais à ce que RF fasse s'il y a une nullité ... Je n'aurais aucune attente, bien que j'espère que cela prendrait le cours le moins cher pour la mise en œuvre (c.-à-d. le développeur RF). –

2

Long n'est pas long. Choisissez l'un ou l'autre, mais utilisez la même chose dans la classe de domaine et le EntityProxy.

+0

Merci beaucoup! –

Questions connexes