Hibernate 如何在单个字段上重写AccessType

Hibernate 如何在单个字段上重写AccessType,hibernate,annotations,Hibernate,Annotations,我有一个类,它包含许多字段,所有字段都由属性注释。但是,对于其中一个字段,我想向数据库显示一个double,向用户显示一个Date 我在这里尝试了任意数量的组合,但是hbm2ddl(以及hibernate)一直将驻留属性视为时间戳。如果不是通过类似于下面的注释(这是所讨论的类的简化版本),我应该如何实现这一点 我会考虑将所有注释移到字段中,但是需要这个注释的类位于继承层次结构的顶部,涉及到另外25个类和许多、许多注释。移动所有注释需要花费一天的大部分时间,而这似乎是一种不雅观的处理方式 @Ent

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

我在这里尝试了任意数量的组合,但是hbm2ddl(以及hibernate)一直将驻留属性视为时间戳。如果不是通过类似于下面的注释(这是所讨论的类的简化版本),我应该如何实现这一点

我会考虑将所有注释移到字段中,但是需要这个注释的类位于继承层次结构的顶部,涉及到另外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;
    }

}

这看起来有点奇怪。我不确定更改访问类型是否真的适合您

您正在违反javabeans约定,这是有风险的。不要这样做——让getter和setter成为纯粹的getter和setter,而没有像构建对象这样隐藏的额外功能


我只需编写另一个方法-
getwellaasdate()
,并在那里进行转换。您还可以定义一个自定义的hibernate
类型来处理这个问题(但这不值得)

我实际上没有想到bean标准。听起来最好的方法是使用备用访问器。谢谢