我想在Ormlite的数据库中保存以下类:
public class Quantity {
private int normalisedAmount;
private String unit;
....
}
public class Article {
private String name;
private Quantity q;
....
}
问题是数量与物品之间存在一对一的关系。使用Ormlite的一种方法是使q外来像:
@DatabaseField(foreign = true)
private Quantity q;
缺点是数据库不是normilazed。
另一个解决方案是制作Custom Data Type by create a Persister。问题在于您要么必须序列化Quantity对象,要么将文件“name”和“q”放入同一个DB列中。他们都不好看。
我如何做一个漂亮的孤独?
答案 0 :(得分:2)
要获得一对一的关系,您可以在unique
字段上设置q
约束。我没有尝试过,但它应该将q.name
字段的行数限制为1。
这个将创建一个Quantity
表,我相信其他ORM就是这样做的。我不认为这违反了数据库“规范化”。您的Article
表中包含一个字段,表示Quantity
的ID - 不确定id字段的位置。 Quantity
中的所有其他字段都位于另一个表中。
另一种方法是将Quantity
嵌入到Article
不支持的{{1}}中。
答案 1 :(得分:0)
我最终让Quantity对象在文章中混合并添加了一个getQuantity方法。现在,DB中的1对1关系消失了。
public class Article {
private String name;
// Quantity
private int normalisedAmount;
private String unit;
....
Quantity getQuantity() {
return new Quantity(normalisedAmount, unit);
}
}