我将 spring/hibernate 应用程序从 MySql 更改为 SQL Server 时遇到问题。
当 Hibernate 通过启动他想要创建(通过hibernate.hbm2ddl.auto
set on update
)数据库的服务器来更新数据库时,但外键因以下错误而失败:
Unsuccessful: alter table table2 add constraint FKDC2DC97ECEB31922 foreign key (login) references table1
Column 'table1.id' is not the same data type as referencing column 'table2.table1_login' in foreign key 'FKDC2DC97ECEB31922'.
映射如下:
表格1:
@Id
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
表2:
@ManyToOne
@JoinColumn (name = "table1_login", referencedColumnName = "login", insertable=false, updatable=false)
public Table1 getTable1() {
return table1;
}
public void setTable1(Table1 table1) {
this.table1= table1;
}
++edit:SQL 看起来像这样:
表 1 中的键:
表 table1 也被其他应用程序使用,因此该表需要列 'id' 作为主键。所以 table1.id 是 table1 的主键。但是hibernate不使用这个table1.id,因为hibernate使用table1.login作为id(见上面的注释)。但是为什么 SQL Server 试图将外键设置为 table1.id 而不是 table1.login ?
谢谢