【发布时间】:2016-03-31 17:52:05
【问题描述】:
我在远程项目上工作,在日志中发现了有趣的记录:
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
日志记录设置为:
<logger level="trace" name="org.hibernate.tool.hbm2ddl"/>
当试图确定发生了什么时:
<prop key="hibernate.hbm2ddl.auto">update</prop>
第一次从备份运行时。
当我看到 Bail.java 源代码时,我很惊讶:
String[] monthName = {"Января", "Февраля",
"Марта", "Апреля", "Мая", "Июня", "Июля",
"Августа", "Сентября", "Октября", "Ноября",
"Декабря"
};
所以这是常数场!
在JPA/Hibernate方面将常量声明存储在实体类中是否正确?
我应该如何标记常量使其不是实体属性?
我认为 static 关键字可以完成这项工作,我考虑将代码重构为:
public static final String[] monthName =
Collections.unmodifiableList(Arrays.asList(
"Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля",
"Августа", "Сентября", "Октября", "Ноября", "Декабря"
));
因为使用hbm2ddl.auto=update 部署的生产版本我想我应该警告DBA 删除不必要的monthName 列。
【问题讨论】:
-
静态的?短暂的? @短暂的。方法丰富。如果某个东西是一个常量,那么它无论如何都应该是静态的......但这与 JPA 无关,而与 Java 无关
标签: java hibernate jpa constants hibernate-mapping