ORMLite for Android不使用foreignAutoRefresh自动刷新外来对象

时间:2012-05-29 15:15:54

标签: java android foreign-keys ormlite

这是我的问题:我有不同的实体链接到其他人,直到嵌套深度为3.我在每个对象中的所有外来字段都注明了

@DatabaseField(foreign = true, foreignAutoRefresh = true)

但是只有嵌套深度为2才能获得实际的autoRefreshed异物。

例如,如果我查询A实体然后我这样做:

A.getB().getC().getD()

对于实体B和C我已经拥有所有字段,而对于实体D我只获取了ID,我需要调用dao.refresh()方法以获取所有D字段。这是一个限制吗?我在文档中找不到任何相关内容。

2 个答案:

答案 0 :(得分:5)

修改

因此,在创建了一些更好的单元测试并对此进行了更多研究后,结果证明这是一个错误。 ORMLite错误地处理了maxForeignAutoRefreshLevel注释中的@DatabaseField设置。现在(因为您似乎已经找到了答案),您需要将foreignAutoRefresh = truemaxForeignAutoRefreshLevel = 3添加到C对象中的B字段和{ {1}}对象中的{1}}字段也是如此。那应该解决它。

我创建了以下错误报告:

  

https://sourceforge.net/tracker/?func=detail&aid=3530801&group_id=297653&atid=1255989

我已经解决了trunk中的问题,并且我已经开始推出4.41版本。自上次发布以来已经有一段时间了,这是一个很好的时间。

答案 1 :(得分:3)

我通过在C实体上添加注释属性maxForeignAutoRefreshLevel = 3解决了这个问题,现在D得到刷新。

奇怪的是,我不需要在A,B或D中都设置maxForeignAutoRefreshLevel。

另一个细节是,如果我将C实体的级别设置为2,则D不会再刷新。似乎maxForeignAutoRefreshLevel = 3从C实体应用到“起始”实体,在我的案例A中。