Hibernate外键列长度不匹配

时间:2018-05-10 13:08:52

标签: sql-server hibernate jpa

我有一个Hibernate实体,比如A,有一个定义为

的列
@NotBlank
@Size(min = 2, max = 50)
private String name;

此A实体在另一个实体B中被引用为外键

@ManyToOne(optional = false, fetch = FetchType.EAGER)
@JoinColumn(foreignKey = @ForeignKey(name = "fk_a_b", value = ConstraintMode.CONSTRAINT), name = "aName",
        referencedColumnName = "name", updatable = false)
@NotNull
private A a;

现在,当hibernates尝试创建表时,它在表A中创建列name作为varchar(50),而表B中的列aName正在创建为Varchar(255)。这在MSSQL中创建外键约束时导致以下错误:

2018-05-10 07:34:42 ERROR SchemaUpdate:main - Column 'A.name' is not the same length or scale as referencing column 'B.aName' in foreign key 'fk_a_b'. Columns participating in a foreign key relationship must be defined with the same length and scale.

我没有看到为列aName设置列长度的选项,该列用于引用列name。我看到的唯一解决方案是使用columnDefinition我不想使用它,因为它特定于数据库。有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

我偶然发现了同样的问题。我没有使用MSSQL,但似乎也发生在我测试过的数据库中,这些数据库是H2和MySQL,尽管那里没有引发错误。

在引用的列上指定@Column(length = ...)可以解决此问题。这应该起作用:

@NotBlank
@Size(min = 2, max = 50)
@Column(length = 50)
private String name;