如何在 Android 上使用 ORMLite 直接设置 'manual' 外键?

How can i directly set a 'manual' foreign key using ORMLite on Android?

我在使用 ORMLite 时遇到了一些小问题。我确定这是一个非常简单的问题,但还找不到任何解决方案。

基本上,我正在尝试直接使用另一个对象的键创建一个外键。

代码看起来通常应该是这样的:

public class A { }

public class B {
    @DatabaseField(foreign = true)
    public A mA;
}

但我正在尝试这样做(因为 A 太大而无法随身携带;我只保留其 ID)

public class A { }

public class B {
    @DatabaseField() // How can I do that?
    public long mA_Id;
}

有没有人已经成功做到了?最终,我想要 "on delete cascade" 约束。

谢谢!

编辑

尝试过:

@DatabaseField(foreign = true, foreignColumnName = DatabaseContract.A._ID)        
public long mA_Id;

但它崩溃了:

Caused by: java.lang.IllegalArgumentException:
    Field FieldType:name=mA_Id,class=B is a primitive class long but marked as foreign
@DatabaseField(foreign = true)
private A mA;

在内部,ORMLite 将在 A table 中存储一个 mA_id 字段(可能是字符串名称),但您不必为此担心。请记住,当您查询 B 时,在 B 字段上设置的 A 将只设置 id 字段。要让 ORMLite 也查找帐户,您需要设置 foreignFieldAutoRefresh=true.

正如@colletjb 所指出的,这里有一些关于这个主题的文档。我们在文档上花费了很长时间,因此它应该会有所帮助。

Foreign objects
Foreign auto refresh

此外,还有一些example code about foreign fields

希望这对您有所帮助。

But i'm trying to do that (because A is too big to carry on everywhere; i only keep its ID)

首先,正如@vishalk 提到的,ORMLite 只在B 中保留A 的id 字段。当您检索 B 时,它会构造一个 A,但只会填充 id 字段。

但是,如果您只想手动存储 id 字段,那么您当然可以这样做。现在 ORMLite 不生成外键约束,所以我只是将它设为 long a_id 并保留它。然后由您在需要时使用 id 获取关联的 A 实例。