Java 用于Android的ORMLite不';t使用foreignAutoRefresh自动刷新外来对象

Java 用于Android的ORMLite不';t使用foreignAutoRefresh自动刷新外来对象,java,android,foreign-keys,ormlite,Java,Android,Foreign Keys,Ormlite,我的问题是:我有不同的实体链接到其他实体,嵌套深度高达3。每个对象中的所有外部字段都用 @DatabaseField(foreign = true, foreignAutoRefresh = true) 但只有当嵌套深度达到2时,我才能得到实际的自动折射异物 例如,如果我查询实体,然后执行以下操作: A.getB().getC().getD() 对于实体B和C,我已经拥有了所有字段,而对于实体D,我只获取了ID,需要调用dao.refresh()方法才能获取所有D字段。这是限制吗?我在文档中

我的问题是:我有不同的实体链接到其他实体,嵌套深度高达3。每个对象中的所有外部字段都用

@DatabaseField(foreign = true, foreignAutoRefresh = true)
但只有当嵌套深度达到2时,我才能得到实际的自动折射异物

例如,如果我查询实体,然后执行以下操作:

A.getB().getC().getD()
对于实体B和C,我已经拥有了所有字段,而对于实体D,我只获取了ID,需要调用dao.refresh()方法才能获取所有D字段。这是限制吗?我在文档中找不到关于它的任何信息。

编辑:

因此,在创建了一些更好的单元测试并对此进行了更多的研究之后,这被证明是一个bug。未正确处理
@DatabaseField
注释中的
maxForeignAutoRefreshLevel
设置。现在(正如您在查看答案时发现的那样),您需要在
B
对象中的
C
字段和
C
对象中的
D
字段中添加
foreignAutoRefresh=true
maxForeignAutoRefreshLevel=3
。这应该可以解决问题

我创建了以下错误报告:


我已经修复了trunk中的问题,并开始推出版本4.41。自从上次发布以来已经有一段时间了,现在是最好的时机。

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

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


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

感谢您的回复!我应该在哪里使用此注释?我猜是在A实体的B域上。所以现在有了@DatabaseField(foreign=true,foreignAutoRefresh=true,maxForeignAutoRefreshLevel=4),但仍然没有按预期工作(没有刷新)。这应该行得通。您知道只有在执行查询时才会刷新它,对吗?让我检查一下单元测试。我正在使用queryAll()方法检索所有a对象(a在B外部字段上的maxForeignAutoRefreshLevel=4)。然后,A.getB().getC().getD()所有我的对象当前都具有foreignAutoRefresh=true。解决我的问题的方法是仅为我的C对象中的D字段添加maxForeignAutoRefreshLevel=3。无论如何,谢谢你!哦,我明白了。对,这是有道理的。尽管它在内部计算级别,但它在本地对象而不是父对象上使用最大值。这已经解决了。我已经更新了我的答案@Andrea。不幸的是,这是ORMLite中的一个bug。