【问题标题】:How to join non primary key in google app engine如何在谷歌应用引擎中加入非主键
【发布时间】:2023-04-04 04:08:01
【问题描述】:

如何在google app engine中使用java获取非主键列userId的数据

List<UserAddress> list = (List<UserAddress>) pmf.getObjectById(UserAddress.class, Long.valueOf(userId));
System.out.println(list.size());

当我获取数据时,控制台出现以下错误

NestedThrowablesStackTrace:
Could not retrieve entity of kind UserAddress with key UserAddress(4)
org.datanucleus.exceptions.NucleusObjectNotFoundException: Could not retrieve entity of kind UserAddress with key UserAddress(4)

也尝试了下面的代码,以获取非主键列 userId 的数据,但它显示 empty list

@SuppressWarnings("unchecked")
public List<UserAddress> getUserAddressFind(String userId) {
    List<UserAddress> returnList = new ArrayList<UserAddress>();
    PersistenceManager pmf = PMF.get().getPersistenceManager();
    try {
        Query query = pmf.newQuery(UserAddress.class);
        query.setFilter("userId == userIdParam");
        query.declareParameters("Long userIdParam");
        returnList = (List<UserAddress>) query.execute(userId);
        System.out.println(returnList.size());
        if (returnList != null && returnList.isEmpty()) {
            System.out.println("No results for userAddresses");
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        pmf.close();
    }

    return returnList;
}

UserAddress.java

package com.rrd.up2me.datastore;

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;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class UserAddress {

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.SEQUENCE)
private Long userAddressId;

@Persistent
private Long userId;

@Persistent
private Long addressId;

@Persistent
private Boolean isPrimary;

public Long getUserAddressId() {
    return userAddressId;
}

public void setUserAddressId(Long userAddressId) {
    this.userAddressId = userAddressId;
}

public Long getUserId() {
    return userId;
}

public void setUserId(Long userId) {
    this.userId = userId;
}

public Long getAddressId() {
    return addressId;
}

public void setAddressId(Long addressId) {
    this.addressId = addressId;
}

public Boolean getIsPrimary() {
    return isPrimary;
}

public void setIsPrimary(Boolean isPrimary) {
    this.isPrimary = isPrimary;
}

}

【问题讨论】:

    标签: java eclipse google-app-engine primary-key jdo


    【解决方案1】:

    UserAddress.java 类中,userIdlong,当执行查询时,传递的变量类型是 String,所以没有获取数据。 AfterType cast userId String to Long 问题解决。

    例如: Long.valueOf(userId)

    Query query = pmf.newQuery(UserAddress.class);
    query.setFilter("userId == userIdParam");
    query.declareParameters("Long userIdParam");
    returnList = (List<UserAddress>) query.execute(Long.valueOf(userId));
    System.out.println(returnList.size());
    

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 2011-05-13
      • 2010-11-24
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      相关资源
      最近更新 更多