当前位置:  开发笔记 > 编程语言 > 正文

Hibernate / JPA:将常量存储在实体类中吗?

如何解决《Hibernate/JPA:将常量存储在实体类中吗?》经验,为你挑选了1个好方法。

我从事远程项目,并在日志中找到了有趣的记录:

2015-12-26 00:28:30,835 DEBUG org.hibernate.tool.hbm2ddl.SchemaUpdate
  Caller+0   at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:251)
  => alter table bail add column monthName tinyblob

日志设置为:


尝试确定会发生什么情况时:

update

第一次从备份运行。

当我看到Bail.java源代码时,我感到很惊讶:

String[] monthName = {"??????", "???????",
        "?????", "??????", "???", "????", "????",
        "???????", "????????", "???????", "??????",
        "???????"
};

所以这是常数场!

用JPA / Hibernate将常量声明存储在实体类中是否正确?

我应该如何标记常量,使其不成为实体属性?

我认为该static关键字可以胜任工作,并且可以将代码重构为:

public static final String[] monthName = 
    Collections.unmodifiableList(Arrays.asList(
        "??????", "???????", "?????", "??????", "???", "????", "????",
        "???????", "????????", "???????", "??????", "???????"
));

因为hbm2ddl.auto=update我部署了生产版本,所以我应该警告DBA删除不必要的monthName列。



1> Vlad Mihalce..:

默认情况下,所有属性都将保留,就好像它们已被@Basic注释标记一样。

为避免保留字段,您可以使用以下选项:

你可以用 @Transient

您可以将其设置为static final字段,但是无论如何您可能想要将其移至常量类实用程序

最好的方法是使用Java 8 java.time.Month,然后国际化月份名称,以便您可以在UI中支持多种语言,同时在数据库中存储通用名称。


您可以使用static,然后Hibernate将不会保留这些字段。
推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有