通过JPA注释定义PK_name



我在SQL server中使用spring引导,我想从spring中定义PK_name,而不是让它自动生成。

Hibernate正在向主键添加一个后缀号。

因此,我不想给PK__Team__3214EC07FA39AD63起这个名字PK_Team

@Entity
public class Team {
@Id
@Column(name = "Id" )
private Integer id;
@Column(name = "FirstName")
private String firstName;
@Column(name = "FamilyName")
private String familyName;
@Column(name = "Email")
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}

不可能指定名称,但我认为可能通过覆盖的自定义方言来普遍阻止后缀

org.hibernate.dialect.Dialect#getAddPrimaryKeyConstraintString(String constraintName)

方法。

您不能对传入的名称执行任何操作,但可以对其进行子字符串处理以删除后缀。

public class MyCustomSqlServerDialect extend SqlServer2012Dialect{
@Override
public String getAddPrimaryKeyConstraintString(String constraintName) {
// default implementation
// return " add constraint " + constraintName + " primary key ";
return " add constraint " + 
constraintName.subString(0, constraintName.lastIndexOf("__")) +
" primary key "   
}
}

显然,只需在相关的Spring/HHibernate属性中设置此方言即可。

相关内容

最新更新