Java 实体字段和数据库表列命名约定的最佳实践

Java 实体字段和数据库表列命名约定的最佳实践,java,hibernate,database-design,naming-conventions,Java,Hibernate,Database Design,Naming Conventions,我正在使用hibernate创建实体和数据库表 我对命名约定感到困惑: 让我们举一个例子: 我们有一个部门实体,如下所示: public class Department { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "department_id", unique = true, nullable = false) @Basic(fetch = FetchType.EAG

我正在使用hibernate创建实体和数据库表 我对命名约定感到困惑:

让我们举一个例子:

我们有一个部门实体,如下所示:

public class Department {

@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @Column(name = "department_id", unique = true, nullable = false)
    @Basic(fetch = FetchType.EAGER)
    private long id;

    @NotBlank(message = "{name.required}")
    @Size(max = 25, message = "{long.value}")
    @Column(name = "department_name", length = 25, nullable = false)
    private String name;

    @Column(name = "department_admin_id", nullable = true)
    private Integer adminId;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "ik_parent_department_id")
    // set the generated column name
    private Department parentDepartment;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "department_id")
    private Set<Employee> employees = new HashSet<Employee>(0);


}
公共课部{
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE)
@列(name=“department\u id”,unique=true,nullable=false)
@基本(fetch=FetchType.EAGER)
私人长id;
@NotBlank(message=“{name.required}”)
@大小(最大值=25,消息=“{long.value}”)
@列(name=“department\u name”,长度=25,可空=false)
私有字符串名称;
@列(name=“department\u admin\u id”,null=true)
私有整数adminId;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“ik\u parent\u department\u id”)
//设置生成的列名
私人部门家长部门;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name=“部门id”)
私有集employees=newhashset(0);
}
例如,在命名部门管理字段时,您是将命名为部门管理id还是管理id,以及案例(小写/大写)如何

当命名属性时,您将它命名为什么,部门管理员ID管理员ID


请告知,在这种情况下,最佳做法是什么,谢谢。

我会选择基于Java的属性和基于DB的列名,因此:

@Column(name = "FAVORITE_QUOTE")
private String favoriteQuote;
在OO世界中,您使用Java(驼峰大小写)约定,同时保持DB约定(大写和下划线链接)。如果已经生成了DB模式,则通常需要调整以适应此模式

如果您正在生成模式-您不想打扰您未来的DBA;-)


编辑:我宁愿选择
favoriteQuote
而不是
userfavoriteQuote
,因为我认为这是多余的。然而,我已经看到了很多DB惯例,其中在列前面加上实体名称会使DBA更容易编写查询。

如果您的表名为
department
,那么所有以
department\ucode>开头的列都没有多少好处。只要叫他们
id
name
admin\u id
,等等

毕竟,你的类成员的前缀不是这样的,是吗?列已通过位于
部门
表中而与
部门
存在隐式关系。进一步的解释过于冗长,不需要

编辑:

在java类中,我将使用camel case。对于列名,我将用下划线分隔。大多数数据库对表名和列名都不区分大小写。

因此,列或属性都不加前缀,列中的属性和下划线都不加大小写(但列下部或上部的大小写如何?)