繁体   English   中英

ORMlite禁用字段的读取

[英]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文档,特别是eagerforeignAutoRefresh部分。

用户:

@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上禁用字段的读取?

你有几种不同的解决方法。

  1. 您可以拥有一个int user_id字段而不是一个User字段,然后拥有一个非数据库字段User ,您可以从user_id自己从数据库中进行处理。

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

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

顺便说一句,请问为什么你不希望User实例化? 这是内存问题吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM