我正在使用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);
}
例如部门管理员字段命名时最好的是,您是将列命名为 department_admin_id 还是 admin_id < / strong>以及案例(较低/资本)?
在命名属性时,您为什么命名, departmentAdminId 或 adminId ?
请告知,在这种情况下,最佳做法是什么,谢谢。
答案 0 :(得分:3)
我会选择基于Java的属性和基于数据库的列名,所以:
@Column(name = "FAVORITE_QUOTE")
private String favoriteQuote;
在OO-world中,您使用Java(camel-case)约定,同时保持DB约定(大写和下划线链接)。如果您已经生成了数据库模式,则通常需要调整此模式。
如果您正在生成架构 - 您不想惹恼未来的DBA; - )
编辑:我更愿意选择favoriteQuote
代替userFavoriteQuite
,因为我认为这是多余的。但是,我已经看到了很多数据库约定,其中以实体名称为列添加前缀使得DBA更容易编写查询。
答案 1 :(得分:3)
如果您的表格被称为department
,那么从department_
开始的所有列中都没有太大的好处。只需称呼他们id
,name
,admin_id
等
毕竟,你们班上的成员都不是这样的前缀吗?通过位于department
表中,列已与department
具有隐式关系。进一步的解释是冗长的,不需要。
修改强>
在java类中,我会使用camel case。对于列名称,我将使用下划线分隔。大多数DB对表和列名称不区分大小写。