技术: - Java 1.5 或 1.6 - Hibernate 3.4
为了避免在更改列名或表名时在多个位置更新列名,我希望有一个相同的常量文件。
我有以下疑问?
一种可能的解决方案是维护一个全局文件,该文件存储数据库中所有表的列名的常量。像
class DbConstants { public static final String EMPLOYEE__PERFORMANCE_DESC="performance_desc"; }
在上述情况下,employees 是表名,performance_desc 是列名。因此,如果两个不同的表都有列名,则遵循 tablename__columnname 格式来命名常量以避免两个不同表的两个常量之间的冲突。
我看到这种方法的一个问题是,随着数据库的增长,这个文件中的常量不会增长到数千个,这很难管理。其他问题是如果表名被更改,我必须更改所有表的前缀表名。
假设如果我将上面示例中的列名从 performance_desc 更改为成就_desc。在这种情况下,我很可能也想更改常量,即从 EMPLOYEE__PERFORMANCE_DESC 更改为 EMPLOYEE__ACHIEVEMENT_DESC。因为在这种情况下,我需要同时更改列名和常量名,所以我看不到直接在我的代码中使用常量而不是列名,尽管有一个好处是在更改常量名时我可以使用折射来反映常量名称更改任何引用的地方。似乎没有太多使用常量,或者我使用错误的方式。
在项目代码中,我似乎有人为每个表列列表定义一个类来定义常量,如下所示。
public class tbl_Employee { public static final PERFORMANCE_DESC=performance_desc; }
这可以解决全局文件的一些问题,例如表名更改只会导致类名更改。一个主要问题是我使用类的唯一目的是定义常量,这不是好的编码习惯。
阅读一些关于 Enum 与 value string 而不是 int 的地方,不确定它在 java 1.5 或 1.6 中是否可用,以及是否建议在给定场景中使用它。
给定定义数据库常量的最佳实践是什么?
使用 db 常量真的有用吗?
如果我像上面提到的那样为每个表使用一个类,我面临的一个问题是命名约定。表名与定义表列常量的相应类名之间应该有什么关系。
上述情况仅涵盖列名而不是表名的情况。我可能喜欢在代码中使用常量而不是表名,所以应该用什么方法来定义表名的常量。
人们经常争辩说,一旦产品或相关版本发布,表名和列名并没有太大变化。表名和列名的更改主要发生在开发阶段或功能增强(新版本)。避免对表名或列名使用常量是否是强有力的论据?
请建议我怎样才能让我的问题更具代表性,或者我错过了什么我的问题没有被投票?