Ormlite中的一对一关系

时间:2013-02-01 15:01:12

标签: ormlite

我想在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列中。他们都不好看。

我如何做一个漂亮的孤独?

2 个答案:

答案 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);
    }
}