Java 最佳实践:JPA的最佳数据库命名约定?
在Java中,类(实体)属性的命名约定是通过以下方式完成的: 但是在SQL世界中,在单词之间使用带下划线的大写字母(如Java常量)被认为是一种错误。在SQL世界中,将表名包含在列名中也是一种最佳实践,这样在大多数情况下,外键的命名与原始表中的id完全相同Java 最佳实践:JPA的最佳数据库命名约定?,java,sql,hibernate,jpa,naming-conventions,Java,Sql,Hibernate,Jpa,Naming Conventions,在Java中,类(实体)属性的命名约定是通过以下方式完成的: 但是在SQL世界中,在单词之间使用带下划线的大写字母(如Java常量)被认为是一种错误。在SQL世界中,将表名包含在列名中也是一种最佳实践,这样在大多数情况下,外键的命名与原始表中的id完全相同 CREATE TABLE USER_MESSAGE ( USER_MESSAGE_ID MEDIUMINT(8) NOT NULL, USER_MESSAGE_SHORT_TITLE VARCHAR(20), USE
CREATE TABLE USER_MESSAGE (
USER_MESSAGE_ID MEDIUMINT(8) NOT NULL,
USER_MESSAGE_SHORT_TITLE VARCHAR(20),
USER_MESSAGE_LONG_TITLE VARCHAR(80),
USER_MESSAGE_HTML_MESSAGE TEXT NOT NULL
);
我应该遵循这两个标准并在@Table和@Column上使用name属性吗?或者我应该遵循Java约定并依赖默认的JPA映射
对于这种标准冲突,最常见的方法和/或最佳方法是什么?遵循这两种方法。db约定应该存在于DBA以及思维定势不同的手动报告和查询中。使用注释上的名称参数来实现这一点。我想这取决于您所引用的约定。我不会将表名放在列名中——仅仅为了重复您已经知道的内容而丢失一半名称空间有什么意义?我(尝试)遵循的一些规则是:
分享和享受。就我而言,两者都是可以接受的。但是,如果您决定不使用默认的驼峰大小写,则可以使用不同的命名策略,而不必求助于为每个注释添加name属性这一繁琐且容易出错的任务 看看Hibernate的org.Hibernate.cfg.ImprovedNamingStrategy类。它使用下划线而不是驼峰大小写。只需在Hibernate配置上设置一个属性来使用它 您还可以扩展ImprovedNamingStrategy,在表名前面加上前缀,或者如果您真的愿意,也可以全部使用大写,但这似乎是不必要的
我应该遵循这两个标准并在@Table和@Column上使用name属性吗?或者我应该遵循Java约定并依赖默认的JPA映射 如果JPA默认约定与贵公司的首选约定不匹配(没有“一个真实的”标准),请覆盖它们。这可以使用
@表
和@列
注释来完成(在Hibernate的特定情况下,您也可以提供自己的注释)
对于这种标准冲突,最常见的方法和/或最佳方法是什么
没有冲突,有Java命名约定,JPA端有一个默认约定,用于将对象映射到表(因为JPA必须选择一个),而SQL端没有“一个真正的”标准。因此:
- 如果您的公司没有任何SQL命名约定,您可以使用JPA约定
- 如果您不喜欢它们,请覆盖它们
- 如果您的公司有约定,请遵循约定并覆盖JPA默认值
CREATE TABLE USER_MESSAGE (
USER_MESSAGE_ID MEDIUMINT(8) NOT NULL,
USER_MESSAGE_SHORT_TITLE VARCHAR(20),
USER_MESSAGE_LONG_TITLE VARCHAR(80),
USER_MESSAGE_HTML_MESSAGE TEXT NOT NULL
);