【问题标题】:Hibernate Annotations: Store an int in a varchar columnHibernate Annotations:将 int 存储在 varchar 列中
【发布时间】:2011-02-24 00:53:29
【问题描述】:

我正在使用 Hibernate 注释。

在我的 POJO 中,我有一个 int 年份字段。

我想将此值保存在我的数据库中的 char(4) 列中,并让 hibernate 来回转换类型。无论如何我可以轻松地做到这一点(我开始研究@Type注释,但如果可能的话不想编写自己的自定义类型)?

【问题讨论】:

    标签: hibernate hibernate-annotations


    【解决方案1】:

    如果映射到 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;
        }
    
    }
    

    【讨论】:

    • 谢谢你,我想它会满足我的需求。虽然,我读得越多,自定义类型似乎也不是太难,所以也许我稍后也会尝试这条路线。现在应该可以启动并运行该功能。
    【解决方案2】:

    我对 Hibernate 资源进行了快速搜索,但我认为没有可以用于此的类型:

    https://github.com/hibernate/hibernate-core/tree/master/hibernate-core/src/main/java/org/hibernate/type

    但我鼓励您实现自己的类型(可能是 Year 类型?),因为它并不像听起来那么困难 :-)

    另一种解决方案,在您的 setter 中处理转换,也是一种选择,但如果没有大量测试和性能测量,我不会这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      相关资源
      最近更新 更多