java - 最佳实践 : best database naming convention for JPA?

标签 java sql hibernate jpa naming-conventions

<分区>

在 Java 中,属性和类(实体)的命名约定是 CamelCase方式:

@Entity 
public class UserMessage implements Serializable { 
    @Id 
    private Integer id; 
    private String shortTitle;
    private String longTitle;
    private String htmlMessage; 
} 

但在 SQL 世界中,它被认为是 best practice在单词之间使用带下划线的大写字母(如 Java 常量)。在 SQL 世界中,将表名包含在列名中也被认为是最佳实践,这样在大多数情况下外键的名称与原始表中的 ID 完全相同。

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 上使用名称属性?或者我应该遵循 Java 约定并依赖默认的 JPA 映射。

解决这种标准冲突的最常见方法和/或最佳方法是什么?

最佳答案

Should I follow both standards and use the name attribute on @Table and @Column? Or should I follow the Java conventions and rely on the default JPA mappings.

如果 JPA 默认约定与贵公司的首选 约定不匹配(没有“唯一正确”的标准),请覆盖它们。这可以使用 @Table@Column 注释来完成(在 Hibernate 的特定情况下,您也可以提供自己的 implementation of a NamingStrategy )。

What is the most common approach and/or the best approach on this conflict of standards?

没有冲突,有 Java 命名约定,在 JPA 端有一个默认约定用于对象到表的映射(因为 JPA 必须选择一个)并且有在 SQL 方面没有“唯一真实”的标准。所以:

  • 如果您的公司没有任何 SQL 命名约定,您可以使用 JPA 约定
    • 如果你不喜欢它们,覆盖它们
  • 如果您的公司有适当的约定,请遵循它们并覆盖 JPA 默认值

关于java - 最佳实践 : best database naming convention for JPA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3945065/

相关文章:

sql - 而不是抛出错误类型 block 执行成功

mysql - 获取 SQL 中的行数

java - 给定场景中的应用服务器是哪一个

java - 使用 findall 或其他查询从存储库获取属性后更改属性值时,在 Spring boot JPA 中禁用数据库更新

java - 如何捕获本地 HTTP 流量

java - 如何在android中读取USSD消息响应

java jdom xml 复制一段xml

SQL LEFT JOIN问题

java - PostgreSQL 函数上的 Hibernate executeUpdate()

java - 如何修复错误 "a non-static method can' 不能从静态上下文引用”?