gpt4 book ai didi

java - ORMlite 禁用字段读取

转载 作者:行者123 更新时间:2023-12-02 05:50:02 25 4
gpt4 key购买 nike

我正在将 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 ?

您有几种不同的方法可以解决这个问题。

  1. 您可以使用 int user_id 字段代替 User 字段,然后使用一个非数据库字段 User hygrade 从您自己的 user_id 数据库中获取。

  2. 您可以做的另一件事是使用 queryBuilder.selectColumns(...) 选择除 user_id< 之外的所有列/ 列。如果您不从选择中返回 user_id ,那么它不会实例化 User 实例。需要注意的是,如果您将 user 字段标记为 @DatabaseFieldORMLite会将其更改为 user_id 或其他内容。

  3. 您可以使用 dao.queryForRaw(...) 方法,并使用自己的 RawRowMapper 自行进行类转换,忽略 结果中的 user_id 列。

顺便问一下,我可以问为什么您不想实例化User吗?这是内存问题吗?

关于java - ORMlite 禁用字段读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23637924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com