Java 实体字段和数据库表列命名约定的最佳实践
我正在使用hibernate创建实体和数据库表 我对命名约定感到困惑: 让我们举一个例子: 我们有一个部门实体,如下所示: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
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。对于列名,我将用下划线分隔。大多数数据库对表名和列名都不区分大小写。因此,列或属性都不加前缀,列中的属性和下划线都不加大小写(但列下部或上部的大小写如何?)