ORMlite禁用字段的读取

时间:2014-05-13 17:28:39

标签: 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;

}

一对多,一个用户&#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上禁用字段读取?

2 个答案:

答案 0 :(得分:1)

我认为你的类定义中有错误,下面的类会产生一对多的连接。

查看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;

}

答案 1 :(得分:1)

  

实例化集合“File”中的对象“User”。我不想要!

     

如何在ORMLite上禁用字段读取?

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

  1. 您可以拥有一个int user_id字段而不是User字段,然后拥有一个非数据库字段User,您可以从{ {1}}。

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

  3. 您可以使用user_id方法自行使用自己的dao.queryForRaw(...)进行课程翻译,忽略结果中的RawRowMapper列。

  4. 顺便说一句,我可以问为什么你不希望user_id实例化?这是一个记忆问题吗?