0

RequestFactoryとDataNucleus(MySQLでJPA)でGWTを使用しようとしていますが、コンパイルできません。

エラーはプロキシクラスでは非常に奇妙です:UserProxy.java:12:long getId()に似たドメインメソッドが見つかりませんでした

私のドメインクラスUser.javaには、そのようなメソッドがあります。問題はどこにあるのだろうか!!!

ところで、誰かが(GAEではなく)同様の構成とantbuild.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();

}



}
4

2 に答える 2

2

Longではありませんlong。どちらかを選択しますが、ドメインクラスとの両方で同じものを使用しますEntityProxy

于 2013-01-04T16:26:26.540 に答える
0

プロキシの「publiclonggetId()」とDTOの「publicLong getId()」の違いをオートボクシングが処理することを期待しますが、両方が「long」または両方を返すように変更してみてください。 「Long」を返します。

于 2013-01-04T16:26:44.607 に答える