2

Ormlite を使用して DB に保存したい次のクラスを取得しました。

public class Quantity {
    private int normalisedAmount; 
    private String unit;
    ....
}

public class Article {
    private String name;  
    private Quantity q;
    ....
}

問題は、Quantity と Article の間に 1 対 1 の関係があることです。Ormlite を使用する 1 つの方法は、次のように q を外部にすることです。

@DatabaseField(foreign = true)
private Quantity q;

欠点は、DB が標準化されないことです

もう 1 つの解決策は、 Persister を作成してカスタム データ型を作成することです。問題は、Quantity オブジェクトをシリアル化するか、フィールド「name」と「q」を同じ DB 列に配置する必要があることです。どれも素敵に見えません。

見栄えの良いソローションを作成するにはどうすればよいですか?

4

2 に答える 2

2

1 対 1 の関係を取得するには、フィールドにunique制約を設定できます。q試したことはありませんが、q.nameフィールドの行数を 1 に制限する必要があります。

これにより、他のORMが行う方法(と私は信じています)のテーブル作成されます。Quantityこれがデータベースの「正規化」に違反しているとは思いません。あなたのArticleテーブルには、のIDを表す単一のフィールドQuantityがあります--IDフィールドが何であるかわかりません。からの残りのフィールドはすべてQuantity、他のテーブルにあります。

別の方法は、 ORMLiteQuantityがサポートしてArticleいないものを埋め込むことです。

于 2013-02-01T15:39:15.147 に答える
0

最終的に、Quantity オブジェクトを Article に溶け込ませ、getQuantity メソッドを追加しました。これで、DB で 1 対 1 の関係がなくなりました。

public class Article {
    private String name;  
    // Quantity
    private int normalisedAmount; 
    private String unit;
    ....

    Quantity getQuantity() {
         return new Quantity(normalisedAmount, unit);
    }
}
于 2013-02-19T20:36:47.057 に答える