假设我有一个名为Person
的类,它通常使用ORMLite持久保存到db表中。
现在,我在Person
类中有一个名为House
的成员。 House
类包含3个属性,并且永远不会存储到数据库中。
我想要的是每当Person
持久存在时我想将House
的3个字段存储到Person
表中3个不同的列中。
因此Person表将具有:{ person_name, person_contact, house_address, house_type, house_date }
。
最后3个字段将来自House
对象。
我想我应该在DataPersister
成员变量上使用House
,但这是否意味着它会将整个House
对象写入一列?我想将它分成Person
表中的3列。有人可以帮忙吗?
谢谢!
答案 0 :(得分:7)
实际上,Serializable对象的完美解决方法可能是:
@DatabaseField (dataType = DataType.SERIALIZABLE)
public Person person;
结果Person作为通常的原始变量存储在单个列中。
答案 1 :(得分:6)
您要求的是嵌入对象。子对象中的所有字段都存储在父对象中。
很抱歉,但是现在(12/2012)ORMLite不支持嵌入式对象。它在TODO列表中,但没有计划阻碍它。正如@ user999717所提到的,我们支持可以自动刷新的外来对象。这允许您将House
对象存储在另一个表中,当您提取Person
时,ORMLite将查询它。以下是它的文档:
答案 2 :(得分:3)
你可以用这个:
@DatabaseField (useGetSet = true)
private String personStr; // Dummy
public Person person;
public String getPersonStr(){ person.toString(); }
public void setPersonStr(String personstr){ person = Person(personstr); }
太糟糕了,以下情况不起作用,您需要额外的虚拟字段:
@DatabaseField (dataType = DataType.String, useGetSet = true)
public Person person;
public String getPerson(){ person.toString(); }
public void setPerson(String personstr){ person = Person(personstr); }
您还可以使用其他答案中所述的dataType = DataType.SERIALIZABLE但是使用自定义序列化,这意味着实际实现Serializable并在读取时处理所有可能的序列化版本。 不应使用默认序列化,因为最终会出现混乱的数据库。