我正在构建一个GWT应用程序,以访问在服务器端使用JDO持久保存的房屋列表。然后通过RPC“getHouseService”将房屋列表移动到客户端以显示和操作。之后他们不会返回并保存在服务器端。JDO查询返回零结果
当我运行应用程序并执行RPC服务时,客户端总是得到一个空的列表。 在测试期间,我注意到我在调试模式下的ide(eclipse)注意到getHouse中返回列表的值是一个StreamingQueryResult。
我在做什么错?我一直在这个问题上停留了一个多星期,并且在网上找不到相关的解决方案。
这是我写我的数据持久化工作代码:
public static PersistenceManagerFactory getPersistenceManagerFactory() {
return pmfInstance;
}
public void addHouse(List<House> listofHouses) {
PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager();
try {
pm.makePersistentAll(listofHouses);
System.out.println("after makePersistentAll");
}
finally {
pm.close();
}
}
@SuppressWarnings("unchecked")
public List<House> getHouses() {
PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager();
List<House> houseList = (List<House>) pm.newQuery("select from " + House.class.getName()).execute();
return houseList;
}
众议院类是:
package vancouverHEA.shared;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import org.datanucleus.jpa.annotations.Extension;
import com.google.gwt.user.client.rpc.IsSerializable;
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable = "true")
public class House extends Building implements IsSerializable {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk", value = "true")
private Long key;
@Persistent (serialized = "true")
java.lang.Double landPrice;
@Persistent (serialized = "true")
java.lang.Double housePrice;
@Persistent (serialized = "true")
java.lang.Boolean forSale;
@Persistent (serialized = "true")
private java.lang.String realtorContact;
@Persistent (serialized = "true")
private java.lang.Integer listPrice;
@Persistent (serialized = "true")
private java.lang.Integer yrBuilt;
@Persistent (serialized = "true")
private java.lang.Integer yrReno;
@Persistent (serialized = "true")
private java.lang.String postalCode;
@Persistent (serialized = "true")
java.lang.Double latitude;
@Persistent (serialized = "true")
java.lang.Double longitude;
String STRATA = "Strata";
String SINGLE = "Single House" ;
public House(double landPrice, double improvPrice, String address,
String postalCode, int yrBuilt, int yrReno) {
super();
this.landPrice = landPrice;
this.housePrice = improvPrice;
this.address = address;
this.postalCode = postalCode.trim().toUpperCase();
this.yrBuilt = yrBuilt;
this.yrReno = yrReno;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode.trim().toUpperCase();
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
public double getPrice() {
return this.landPrice + this.housePrice;
}
public boolean isForSale() {
return forSale;
}
public void setForSale(boolean forSale) {
this.forSale = forSale;
}
public String getRealtorContact() {
return realtorContact;
}
public void setRealtorContact(String realtorContact) {
this.realtorContact = realtorContact;
}
public int getListPrice() {
return listPrice;
}
public void setListPrice(int listPrice) {
this.listPrice = listPrice;
}
public int getYrBuilt() {
return yrBuilt;
}
public void setYrBuilt(int yrBuilt) {
this.yrBuilt = yrBuilt;
}
public int getYrReno() {
return yrReno;
}
public void setYrReno(int yrReno) {
this.yrReno = yrReno;
}
public void setLandPrice(Double landPrice) {
this.landPrice = landPrice;
}
public double getLandPrice(){
return landPrice;
}
public void setHousePrice(Double housePrice) {
this.housePrice = housePrice;
}
public double getHousePrice() {
return housePrice;
}
}
你为什么要连续化Double,String,Boolean,Integer类型的字段?因此它们在查询中不可用。很明显,日志会告诉你所有正在发生的事情,所以最好检查它 – DataNucleus 2012-07-23 04:47:23