Ormlite将字段映射到简单的成员类

时间:2012-04-10 14:11:10

标签: java android ormlite

我正在尝试使用ORMLite for android。

我有一个预先构建的SQLite数据库,我正在Android设备上加载。我已将位置信息存储为LocationX,LocationY列:

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

Catch是,在运行时我希望看起来像这样:

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!
}

我是否错过了一些明显的事情,或者我是否完全咆哮了错误的树?任何人都可以建议一种替代/更漂亮的方法吗?

1 个答案:

答案 0 :(得分:0)

如果我理解,您希望将表映射到具有子类的类。在您的示例中,我猜您要将LocationXLocationY字段加载到mposition,我猜是Vector2

我认为可以使用getMPosition()setMPosition(mpos)方法在LocationXLocationY字段之间进行映射,但是您无法用ORMLite自动神奇地进行映射。


从纯洁的角度来看,我总是建议使用数据库圈子称为“实体类”。此类完全镜像您的数据库结构。它应该与表中的字段和类之间具有一对一的对应关系。它可以包含hashCode()equals()和标准的getter / setter等方法,但其他方法却很少。

您可以创建一个包装对象,在其构造函数中接受GraphicsInstance对象,并执行Vector2映射并允许其他操作。当您需要返回GraphicsInstance对象时准备好继续它。