我有一个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
我不想使用它,因为它特定于数据库。有没有其他方法可以解决这个问题?
答案 0 :(得分:0)
我偶然发现了同样的问题。我没有使用MSSQL,但似乎也发生在我测试过的数据库中,这些数据库是H2和MySQL,尽管那里没有引发错误。
在引用的列上指定@Column(length = ...)
可以解决此问题。这应该起作用:
@NotBlank
@Size(min = 2, max = 50)
@Column(length = 50)
private String name;