【发布时间】:2011-02-24 00:53:29
【问题描述】:
我正在使用 Hibernate 注释。
在我的 POJO 中,我有一个 int 年份字段。
我想将此值保存在我的数据库中的 char(4) 列中,并让 hibernate 来回转换类型。无论如何我可以轻松地做到这一点(我开始研究@Type注释,但如果可能的话不想编写自己的自定义类型)?
【问题讨论】:
标签: hibernate hibernate-annotations
我正在使用 Hibernate 注释。
在我的 POJO 中,我有一个 int 年份字段。
我想将此值保存在我的数据库中的 char(4) 列中,并让 hibernate 来回转换类型。无论如何我可以轻松地做到这一点(我开始研究@Type注释,但如果可能的话不想编写自己的自定义类型)?
【问题讨论】:
标签: hibernate hibernate-annotations
如果映射到 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;
}
}
【讨论】:
我对 Hibernate 资源进行了快速搜索,但我认为没有可以用于此的类型:
但我鼓励您实现自己的类型(可能是 Year 类型?),因为它并不像听起来那么困难 :-)
另一种解决方案,在您的 setter 中处理转换,也是一种选择,但如果没有大量测试和性能测量,我不会这样做。
【讨论】: