我正在使用Hibernate Annotations。
在我的POJO中,我有一个年份字段,这是一个int。
我想将此值保存在我的数据库中的char(4)列中,并且hibernate来回转换类型。无论如何我可以轻松地做到这一点(我开始研究@Type注释,但如果可能的话,我不想写自己的自定义类型)?
答案 0 :(得分:6)
如果映射到DB的char(4)列的POJO字段是属性访问的,那么hibernate将调用其setter和getter来获取数据库和POJO之间的映射。因此,转换逻辑可以在该属性的setter和getter内实现。此外,intDate应标记为@Transient,告诉hibernate忽略映射此字段。
public class TableABC {
private int id;
private int intDate;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(length=4)
private String getCharDate() {
return String.valueOf(this.intDate);
}
private void setCharDate(String charDate) {
try {
this.intDate = Integer.parseInt(charDate);
} catch (NumberFormatException e) {
//Logic to handle when charDate cannot convert to integer
this.intDate = 0;
}
}
@Transient
public int getIntDate() {
return intDate;
}
public void setIntDate(int intDate) {
this.intDate = intDate;
}
}
答案 1 :(得分:1)
我快速搜索了Hibernate源代码,我认为没有一种类型可以用于此:
但是我鼓励你实现你自己的Type(也许是Year类型?),因为它并不像听起来那么困难: - )
另一个解决方案是处理你的setter中的转换,也是一个选项,但如果没有大量的测试和性能测量,我就不会这样做。