如何在 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
实例。
我在使用 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
实例。