我使用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;
}
一对多,一个用户&#34;可以有很多&#34;文件&#34;。为了访问&#34;文件&#34;,我总是使用对象&#34; User&#34;那样:
List<User> users;
Dao<User, ?> daoUser;
users = daoUser.queryForAll();
System.out.println(users);
System.out.println(users.files.get(0));
对象&#34;用户&#34;在集合内&#34;文件&#34;被实例化。我不想要!
我想&#34; User.files.get(0).user
&#34;为空。
如何在ORMLite上禁用字段读取?
答案 0 :(得分:1)
我认为你的类定义中有错误,下面的类会产生一对多的连接。
查看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;
}
答案 1 :(得分:1)
实例化集合“File”中的对象“User”。我不想要!
如何在ORMLite上禁用字段读取?
你有几种不同的解决方法。
您可以拥有一个int user_id
字段而不是User
字段,然后拥有一个非数据库字段User
,您可以从{ {1}}。
您可以做的另一件事是使用user_id
选择除 queryBuilder.selectColumns(...)
列之外的所有列。如果您没有从select中返回user_id
,那么它将不会实例化user_id
实例。请务必注意,如果您将User
字段标记为user
,则ORMLite会将其更改为@DatabaseField
或其他内容。
您可以使用user_id
方法自行使用自己的dao.queryForRaw(...)
进行课程翻译,忽略结果中的RawRowMapper
列。
顺便说一句,我可以问为什么你不希望user_id
实例化?这是一个记忆问题吗?