这是我的问题:我有不同的实体链接到其他人,直到嵌套深度为3.我在每个对象中的所有外来字段都注明了
@DatabaseField(foreign = true, foreignAutoRefresh = true)
但是只有嵌套深度为2才能获得实际的autoRefreshed异物。
例如,如果我查询A实体然后我这样做:
A.getB().getC().getD()
对于实体B和C我已经拥有所有字段,而对于实体D我只获取了ID,我需要调用dao.refresh()方法以获取所有D字段。这是一个限制吗?我在文档中找不到任何相关内容。
答案 0 :(得分:5)
修改强>
因此,在创建了一些更好的单元测试并对此进行了更多研究后,结果证明这是一个错误。 ORMLite错误地处理了maxForeignAutoRefreshLevel
注释中的@DatabaseField
设置。现在(因为您似乎已经找到了答案),您需要将foreignAutoRefresh = true
和maxForeignAutoRefreshLevel = 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中。