java - ORMlite 禁用字段读取

标签 java ormlite

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

相关文章:

c# - Java 中 StringBuffer 的 .NET 等价物是什么?

android - 如何关闭 SQLite 自动索引功能?

java - ORMLite JOINs,或 rawQuery 自动映射

java - 为什么类型声明在静态类型语言中很重要?

java - 如果 LinkedList 为空,则返回 int 的方法不返回任何内容?

Java 监听器方法参数

java - 有没有更快的方法从 Sqlite 查询中遍历行?

android - ORMLite 并将现有持久实体添加到外部字段集合

ormlite - 在 Ormlite 中,编写不区分大小写的查询

android - 如何将自己的 DAO 类与表配置文件一起使用