gwt — requestfactory с datanucleus с jpa и rdbms

Я пытаюсь использовать GWT с RequestFactory и DataNucleus (JPA с MySQL), но не могу его скомпилировать.

Ошибка очень странная в прокси-классе: 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();

}



}

person Devin Konny    schedule 04.01.2013    source источник
comment
Так что, если это во время компиляции, то ничего общего с DataNucleus или JPA; они не вызываются во время выполнения   -  person DataNucleus    schedule 04.01.2013


Ответы (2)


Я ожидаю, что автоупаковка позаботится о разнице между «public long getId()» в прокси-сервере и «public Long getId()» в DTO, но, возможно, вы могли бы попробовать изменить их так, чтобы они оба возвращали «long» или оба вернуть «Длинный».

person Andy King    schedule 04.01.2013
comment
Какого поведения вы ожидаете, если getId() вернет null? NullPointerException? на сервере при сериализации? или на клиенте при десериализации? - person Thomas Broyer; 05.01.2013
comment
Конечно, я бы не стал ожидать нуля от getId(); что я ожидаю от RF, если есть нуль ... У меня не было бы установленных ожиданий, хотя я надеюсь, что для реализации потребуется самый дешевый курс (т. Е. Минимум кода и усилий для разработчик РФ). - person Andy King; 05.01.2013

Long не long. Выберите одно или другое, но используйте одно и то же как в классе предметной области, так и в EntityProxy.

person Thomas Broyer    schedule 04.01.2013