5

假设我有一个名为的类Person,它通常使用 ORMLite 持久化到一个数据库表中。

现在,我在Person该类中有一个名为House. 该类House包含 3 个属性,并且永远不会存储到数据库中。

我想要的是每当Person持久化时,我想将表中的 3 个字段存储HousePerson3 个不同的列中。

所以 Person 表将有 : { person_name, person_contact, house_address, house_type, house_date }

最后 3 个字段将来自House对象。

我想我应该DataPersisterHouse成员变量上使用 a 但这是否意味着它将整个House对象写入 ONE 列?我想将它分成表格内的 3 列Person。有人可以帮忙吗?

谢谢!

4

3 回答 3

7

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

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

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

于 2012-12-11T12:40:39.170 回答
6

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

抱歉,现在 (12/2012) ORMLite不支持嵌入对象。它在 TODO 列表中,但没有任何计划。正如@user999717 提到的,我们确实支持可以自动刷新的外来对象。这允许您将House对象存储在另一个表中,当您拉出Person. 这是它的文档:

http://ormlite.com/docs/foreign

于 2011-10-21T20:42:50.950 回答
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 并在阅读时处理所有可能的序列化版本。不应使用默认序列化,因为您最终会弄乱数据库。

于 2014-10-13T10:45:59.147 回答