我的查询 return 一个空列表而不是一个条目
My query return a null list instead of one entry
我正在尝试从 table 获取我的用户:
我通过表格保存了这些值(所以 cayenne 配置似乎不错)。
UserInfoFactory class 是:
public class UserInfoFactory extends _UserInfo implements Serializable {
private static final long serialVersionUID = 1L;
public static ObjectContext getContext() {
@SuppressWarnings("deprecation")
ServerRuntime runtime = new ServerRuntime("cayenne-myapplication.xml");
return runtime.newContext();
}
@SuppressWarnings("unchecked")
public static List<UserInfoFactory> getUsersInfo() {
SQLTemplate select = new SQLTemplate(UserInfoFactory.class,
"SELECT * FROM mam.userinfo");
return getContext().performQuery(select);
}
}
我的 _UserInfo class 是:
package com.example.myapplication.model;
import org.apache.cayenne.CayenneDataObject;
/**
* Class _UserInfo was generated by Cayenne.
* It is probably a good idea to avoid changing this class manually,
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
public abstract class _UserInfo extends CayenneDataObject {
public static final String ADDRESS_PROPERTY = "address";
public static final String EMAIL_PROPERTY = "email";
public static final String FIRSTNAME_PROPERTY = "firstname";
public static final String LASTNAME_PROPERTY = "lastname";
public static final String PHONENUMBER_PROPERTY = "phonenumber";
public static final String USERPASSWORD_PROPERTY = "userpassword";
public static final String USERPRIVILEGES_PROPERTY = "userprivileges";
public static final String USERID_PK_COLUMN = "USERID";
public void setAddress(String address) {
writeProperty(ADDRESS_PROPERTY, address);
}
public String getAddress() {
return (String)readProperty(ADDRESS_PROPERTY);
}
public void setEmail(String email) {
writeProperty(EMAIL_PROPERTY, email);
}
public String getEmail() {
return (String)readProperty(EMAIL_PROPERTY);
}
public void setFirstname(String firstname) {
writeProperty(FIRSTNAME_PROPERTY, firstname);
}
public String getFirstname() {
return (String)readProperty(FIRSTNAME_PROPERTY);
}
public void setLastname(String lastname) {
writeProperty(LASTNAME_PROPERTY, lastname);
}
public String getLastname() {
return (String)readProperty(LASTNAME_PROPERTY);
}
public void setPhonenumber(Integer phonenumber) {
writeProperty(PHONENUMBER_PROPERTY, phonenumber);
}
public Integer getPhonenumber() {
return (Integer)readProperty(PHONENUMBER_PROPERTY);
}
public void setUserpassword(String userpassword) {
writeProperty(USERPASSWORD_PROPERTY, userpassword);
}
public String getUserpassword() {
return (String)readProperty(USERPASSWORD_PROPERTY);
}
public void setUserprivileges(Short userprivileges) {
writeProperty(USERPRIVILEGES_PROPERTY, userprivileges);
}
public Short getUserprivileges() {
return (Short)readProperty(USERPRIVILEGES_PROPERTY);
}
}
我正在调用这样的方法:
List<UserInfoFactory> users = UserInfoFactory.getUsersInfo();
但用户列表 return 为空。
那不应该是空的,而是一个值(测试用户)。
我做错了什么?
谢谢,
Cayenne 使用 return null
而不是对象的原因是 PK 字段在结果集中未找到或其值为 NULL
。
在你的情况下,我认为 Cayenne 在结果中找不到 PK,因为它似乎被定义为 userid
id DB,在 Cayenne 代码中我看到它是 USERID
.
请允许我就您的代码给您一些一般性建议。
为每个请求创建 ServerRuntime 并不是真正有效的解决方案,您应该将其保留为应用程序单例,如果您使用的是旧版本的 Cayenne,请参阅 for details. Moreover ObjectSelect (or SelectQuery)是一种更好(并且确实更灵活)的选择对象的方式。
你可以这样使用它:
List<UserInfoFactory> result = ObjectSelect.query(UserInfoFactory.class)
.select(context);
我正在尝试从 table 获取我的用户:
我通过表格保存了这些值(所以 cayenne 配置似乎不错)。
UserInfoFactory class 是:
public class UserInfoFactory extends _UserInfo implements Serializable {
private static final long serialVersionUID = 1L;
public static ObjectContext getContext() {
@SuppressWarnings("deprecation")
ServerRuntime runtime = new ServerRuntime("cayenne-myapplication.xml");
return runtime.newContext();
}
@SuppressWarnings("unchecked")
public static List<UserInfoFactory> getUsersInfo() {
SQLTemplate select = new SQLTemplate(UserInfoFactory.class,
"SELECT * FROM mam.userinfo");
return getContext().performQuery(select);
}
}
我的 _UserInfo class 是:
package com.example.myapplication.model;
import org.apache.cayenne.CayenneDataObject;
/**
* Class _UserInfo was generated by Cayenne.
* It is probably a good idea to avoid changing this class manually,
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
public abstract class _UserInfo extends CayenneDataObject {
public static final String ADDRESS_PROPERTY = "address";
public static final String EMAIL_PROPERTY = "email";
public static final String FIRSTNAME_PROPERTY = "firstname";
public static final String LASTNAME_PROPERTY = "lastname";
public static final String PHONENUMBER_PROPERTY = "phonenumber";
public static final String USERPASSWORD_PROPERTY = "userpassword";
public static final String USERPRIVILEGES_PROPERTY = "userprivileges";
public static final String USERID_PK_COLUMN = "USERID";
public void setAddress(String address) {
writeProperty(ADDRESS_PROPERTY, address);
}
public String getAddress() {
return (String)readProperty(ADDRESS_PROPERTY);
}
public void setEmail(String email) {
writeProperty(EMAIL_PROPERTY, email);
}
public String getEmail() {
return (String)readProperty(EMAIL_PROPERTY);
}
public void setFirstname(String firstname) {
writeProperty(FIRSTNAME_PROPERTY, firstname);
}
public String getFirstname() {
return (String)readProperty(FIRSTNAME_PROPERTY);
}
public void setLastname(String lastname) {
writeProperty(LASTNAME_PROPERTY, lastname);
}
public String getLastname() {
return (String)readProperty(LASTNAME_PROPERTY);
}
public void setPhonenumber(Integer phonenumber) {
writeProperty(PHONENUMBER_PROPERTY, phonenumber);
}
public Integer getPhonenumber() {
return (Integer)readProperty(PHONENUMBER_PROPERTY);
}
public void setUserpassword(String userpassword) {
writeProperty(USERPASSWORD_PROPERTY, userpassword);
}
public String getUserpassword() {
return (String)readProperty(USERPASSWORD_PROPERTY);
}
public void setUserprivileges(Short userprivileges) {
writeProperty(USERPRIVILEGES_PROPERTY, userprivileges);
}
public Short getUserprivileges() {
return (Short)readProperty(USERPRIVILEGES_PROPERTY);
}
}
我正在调用这样的方法:
List<UserInfoFactory> users = UserInfoFactory.getUsersInfo();
但用户列表 return 为空。
我做错了什么?
谢谢,
Cayenne 使用 return null
而不是对象的原因是 PK 字段在结果集中未找到或其值为 NULL
。
在你的情况下,我认为 Cayenne 在结果中找不到 PK,因为它似乎被定义为 userid
id DB,在 Cayenne 代码中我看到它是 USERID
.
请允许我就您的代码给您一些一般性建议。
为每个请求创建 ServerRuntime 并不是真正有效的解决方案,您应该将其保留为应用程序单例,如果您使用的是旧版本的 Cayenne,请参阅
你可以这样使用它:
List<UserInfoFactory> result = ObjectSelect.query(UserInfoFactory.class)
.select(context);