我有一个包含许多字段的类,所有字段都按属性注释。但是,对于其中一个字段,我想向数据库提供一个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;
}
}
答案 0 :(得分:3)
这看起来有点奇怪。我不确定更改访问类型实际上对您有用。
你违反了javabeans惯例,这是有风险的。不要这样做 - 让getter和setter纯粹是getter和setter,没有隐藏的额外内容,比如构造对象。
我只想写另一种方法 - getDwellAsDate()
并在那里进行转换。你也可以定义一个自定义的休眠Type
来处理它(但它不值得)