0

Android用のORMLiteを試しています。

Androidデバイスにロードしているビルド済みのSQLite dbがあります。位置情報を LocationX、LocationY 列として保存しました。

CREATE TABLE graphicsinstances(Name STRING , LocationX FLOAT , LocationY FLOAT , SizeX FLOAT , SizeY FLOAT );

キャッチは、実行時にこれを次のようにしたいです:

public class Vector2
{
    public float X;
    public float Y;
}
@DatabaseTable(tableName = "graphicsinstances")
public class graphicsinstance
{
    public GraphicalEntityInstance()
    {
        mName               = null;
        mPosition           = Vector2.zero();
        mSize               = Vector2.zero();
    }
    @DatabaseField(columnName = "Name", canBeNull = false)
    public String mName;

    //Olympic standard optimism
    //@DatabaseField(columnName = "Location", canBeNull = false)
    //public Vector2 mPosition;

    // current (unsatisfactory) method:
    @DatabaseField(canBeNull = false, useGetSet=true)
    private float LocationX;
    public float getLocationX() { return mPosition.X;}
    public void setLocationX(float x) { mPosition.X = x;}
    // repeat for Y, SizeX & SizeY!
}

明らかな何かを見逃したのでしょうか、それとも間違ったツリーを完全に吠えていますか? 誰かが別の/きれいな方法を提案できますか?

4

1 に答える 1

0

私が理解している場合、テーブルをサブクラスを持つクラスにマップしたいと考えています。LocationXあなたの例では、 andLocationYフィールドをロードしたいと思いmpositionますVector2

andフィールド間のマッピングを行うgetMPosition()andsetMPosition(mpos)メソッドを使用しても問題ないと思いますが、ORMLite を使用して自動的にそのマッピングを行うことはできません。LocationXLocationY


純度の観点から、私は常に、データベース サークルが「エンティティ クラス」と呼ぶものを使用することをお勧めします。このクラスは、データベース構造を正確に反映しています。テーブル内のフィールドとクラスは 1 対 1 で対応している必要があります。hashCode()、 、および標準のゲッター/セッターなどのメソッドを持つことができますがequals()、それ以外はほとんどありません。

GraphicsInstanceコンストラクターでオブジェクトを受け取り、Vector2マッピングを行い、他の操作を許可するラッピング オブジェクトを作成できます。GraphicsInstanceオブジェクトに戻る必要があるときに永続化する準備が整ったとき。

于 2012-04-10T14:52:20.743 に答える