我正在将 ORMLITE 与 2 个对象一起使用:
用户:
@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;
}
这是一对多,一个“用户”可以有多个"file"。为了访问"file",我总是使用对象“用户”,如下所示:
List<User> users;
Dao<User, ?> daoUser;
users = daoUser.queryForAll();
System.out.println(users);
System.out.println(users.files.get(0));
集合“File”内的对象“User”被实例化。我不想!
我希望“User.files.get(0).user
”为空。
如何禁用 ORMLite 上字段的读取?
最佳答案
The object "User" inside the collection "File" is instantiated. I don't want !
How can I disable the read of a Field on ORMLite ?
您有几种不同的方法可以解决这个问题。
您可以使用
int user_id
字段代替User
字段,然后使用一个非数据库字段User
hygrade 从您自己的user_id
数据库中获取。您可以做的另一件事是使用
queryBuilder.selectColumns(...)
选择除user_id< 之外的所有列/
列。如果您不从选择中返回user_id
,那么它不会实例化User
实例。需要注意的是,如果您将user
字段标记为@DatabaseField
,ORMLite会将其更改为user_id
或其他内容。您可以使用
dao.queryForRaw(...)
方法,并使用自己的RawRowMapper
自行进行类转换,忽略结果中的 user_id
列。
顺便问一下,我可以问为什么您不想实例化User
吗?这是内存问题吗?
关于java - ORMlite 禁用字段读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637924/