ORMLite自定义数据包含多个列

时间:2011-10-21 17:36:03

标签: android orm ormlite

假设我有一个名为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列。有人可以帮忙吗?

谢谢!

3 个答案:

答案 0 :(得分:7)

实际上,Serializable对象的完美解决方法可能是:

@DatabaseField (dataType = DataType.SERIALIZABLE) 
public Person person;

结果Person作为通常的原始变量存储在单个列中。

答案 1 :(得分:6)

您要求的是嵌入对象。子对象中的所有字段都存储在父对象中。

很抱歉,但是现在(12/2012)ORMLite不支持嵌入式对象。它在TODO列表中,但没有计划阻碍它。正如@ user999717所提到的,我们支持可以自动刷新的外来对象。这允许您将House对象存储在另一个表中,当您提取Person时,ORMLite将查询它。以下是它的文档:

  

http://ormlite.com/docs/foreign

答案 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并在读取时处理所有可能的序列化版本。 不应使用默认序列化,因为最终会出现混乱的数据库。