技术:
- Java 1.5或1.6
- Hibernate 3.4
为了避免在更改列名或表名时在多个位置更新列名,我想要一个常量文件。
我有以下问题?
一个可能的解决方案是维护一个全局文件,其中存储了数据库中所有表列名的常量。 例如:
class DbConstants { public static final String EMPLOYEE__PERFORMANCE_DESC="performance_desc"; }
tablename__columnname
格式来命名常量。我看到这种方法的一个问题是,随着数据库增长,该文件中的常量数量将增加到数千个,这很难管理。另一个问题是如果表名更改,我必须更改所有表的前缀表名。
假设我在上面的例子中更改列名从performance_desc到achievements_desc。在这种情况下,我很可能也想要更改常量,即从
EMPLOYEE__PERFORMANCE_DESC
到EMPLOYEE__ACHIEVEMENT_DESC
。由于在这种情况下我需要同时更改列名和常量名,因此我不认为在我的代码中使用常量而不是直接使用列名有多大用处,尽管有一个好处是在更改常量名时,我可以使用反射来反映常量名的更改,无论引用了哪个地方。 看起来要么没有太多使用常量的用处,要么我使用的方式不正确。在项目代码中,我看到人们为每个表列列表定义一个类来定义常量,如下所示。
public class tbl_Employee { public static final PERFORMANCE_DESC=performance_desc; }
这可以解决一些全局文件的问题,例如表名更改只会导致类名更改。
但是,这种方法的一个主要问题是我仅使用类来定义常量,这不是良好的编码实践。
在某个地方读到过使用值字符串而不是整数的枚举类型,不确定它是否适用于Java 1.5或1.6,并且在给定情况下是否建议使用。
对于定义数据库常量,最佳实践是什么?
使用数据库常量真的有用吗?
如果像上面提到的每个表使用一个类,我遇到的一个问题是命名约定。表名和相应类的名称之间的关系应该是什么,以定义表的列的常量。
上述情况仅涵盖列名的情况,而不是表名。我可能希望在代码中使用常量而不是表名,那么为定义表名的常量应采取什么方法。
通常认为,一旦发布产品或相关版本,表名和列名就不会经常更改。表名和列名的更改大多发生在开发阶段或功能增强(新版本)期间。这是避免使用表名或列名常量的有力论据吗?