如何在单个字段上覆盖AccessType

时间:2011-02-22 17:18:05

标签: hibernate annotations

我有一个包含许多字段的类,所有字段都按属性注释。但是,对于其中一个字段,我想向数据库提供一个double,并向用户显示一个Date。

我在这里尝试过任意数量的组合,但是hbm2ddl(因此,hibernate)继续将dwell属性视为时间戳。如果不是通过类似于我下面的注释(这是所讨论的类的简化版本),我应该如何实现这个?

我会考虑将所有注释移动到字段,但是需要它的类位于继承层次结构的顶部,涉及另外25个类和许多注释。移动所有注释需要一天中的大部分时间,这似乎是处理这种情况的一种不公平的方式。

@Entity
@AccessType("property")
public class Test {

    private long id;
    private Double dwell;

    @Id
    @Column(name = "ID", nullable = false)
    @GeneratedValue(strategy = GenerationType.AUTO)
    @NotNull
    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    @AccessType("field")
    @Column(name = "DWELL_ID", precision = 10, scale = 3)
    public Date getDwell() {
        return new Date();
    }

    public void setDwell(Double dwell) {
        this.dwell = dwell;
    }

}

1 个答案:

答案 0 :(得分:3)

这看起来有点奇怪。我不确定更改访问类型实际上对您有用。

你违反了javabeans惯例,这是有风险的。不要这样做 - 让getter和setter纯粹是getter和setter,没有隐藏的额外内容,比如构造对象。

我只想写另一种方法 - getDwellAsDate()并在那里进行转换。你也可以定义一个自定义的休眠Type来处理它(但它不值得)