[英]ORMlite disable the read of a field
我正在使用带有2个对象的ORMLITE:
用户:
@DatabaseTable(tableName = "user")
public class User {
@DatabaseField(columnName = "id", generatedId = true, index = true)
public int id;
@ForeignCollectionField(eager = true, foreignFieldName = "user")
public Collection<File> files;
}
文件:
@DatabaseTable(tableName = "file")
public class File {
@DatabaseField(columnName = "id", generatedId = true, index = true)
public int id;
@DatabaseField(columnName = "user", foreign = true) <- disable the read of this field
public User user;
@DatabaseField(columnName = "filename")
public String filename;
}
这是一对多,“用户”可以有很多“文件”。 为了访问“文件”,我总是使用对象“用户”,如下所示:
List<User> users;
Dao<User, ?> daoUser;
users = daoUser.queryForAll();
System.out.println(users);
System.out.println(users.files.get(0));
集合“文件”中的对象“用户”被实例化。 我不想要!
我希望“ User.files.get(0).user
”为null。
如何在ORMLite上禁用字段的读取?
我认为你的类定义中有错误,在类之后进行一对多连接。
检查ormlite.com文档,特别是eager
和foreignAutoRefresh
部分。
用户:
@DatabaseTable(tableName = "user")
public class User {
@DatabaseField(columnName = "id", generatedId = true, index = true)
public int id;
@ForeignCollectionField(eager = false)
public Collection<File> files;
}
文件:
@DatabaseTable(tableName = "file")
public class File {
@DatabaseField(columnName = "id", generatedId = true, index = true)
public int id;
@DatabaseField(columnName = "id", foreign = true, foreignAutoRefresh = false)
public User user;
@DatabaseField(columnName = "filename")
public String filename;
}
集合“文件”中的对象“用户”被实例化。 我不想要!
如何在ORMLite上禁用字段的读取?
你有几种不同的解决方法。
您可以拥有一个int user_id
字段而不是一个User
字段,然后拥有一个非数据库字段User
,您可以从user_id
自己从数据库中进行处理。
您可以做的另一件事是使用queryBuilder.selectColumns(...)
来选择除 user_id
列之外的所有列。 如果您没有从select中返回user_id
,那么它将不会实例化User
实例。 请务必注意,如果将user
字段标记为@DatabaseField
, ORMLite会将其更改为user_id
或其他内容。
您可以使用dao.queryForRaw(...)
方法并使用您自己的RawRowMapper
自行进行类转换,忽略结果中的user_id
列。
顺便说一句,请问为什么你不希望User
实例化? 这是内存问题吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.