我使用 Spring Boot 2 (2.0.1.RELEASE) 和 H2 db 的默认 Hibernate 版本,并且使用 @Embeddable 时生成的表中的字段大小存在问题。
这是我的代码:
@Entity
public class Publisher {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@NotBlank
@Size(min=2, max=150)
private String name;
@NotNull
private Address address;
...
}
@Embeddable
public class Address {
@NotBlank
@Size(min=3, max=100)
private String street;
@NotBlank
@Size(min=2, max=100)
private String city;
@NotBlank
@Size(min=2, max=100)
private String county;
@NotBlank
@Size(min=7, max=8)
private String postcode;
...
}
当 Spring Boot 启动时,它会在 H2 中创建表。使用 @Size 注释中的最大值,Publisher 中“名称”属性中的列大小正确设置为 150。
嵌入地址实体的 @Size 注释中的最大值将被忽略,并为所有 4 个字段设置为最多 255 个字符。
这是预期的行为还是应该将嵌入字段中的 db 列设置为地址实体中 @Size 注释的最大值?
我知道我可以使用 @Column 注释的长度值来设置它,但我希望在没有额外的 @Column 注释的情况下使其正常工作。
抱歉,如果这是重复的,但我搜索了几个小时才决定在这里发布我的问题。
谢谢 卡兹
最佳答案
对于录制的内容,问题是 Address
字段缺少 @Valid
注释:
@NotNull
@Valid
private Address address;
如果没有此注释,则不会启用级联,并且会忽略 Address
中的约束注释。
关于java - Spring Boot 2 Hibernate 5 @Embeddable 属性在 H2 中生成错误的字段大小(创建-删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50104083/