java - Spring Boot 2 Hibernate 5 @Embeddable 属性在 H2 中生成错误的字段大小(创建-删除)

标签 java hibernate spring-boot hibernate-validator embeddable

我使用 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/

相关文章:

java - Spring 启动 + Spring 安全 : how to suppress the basic auth form

java - @GenerateValue 不适用于非 id 字段

java - 如何在 Spring 中取消预定的 Quartz 作业

java - Hibernate:获取实体映射中的一组对象

sql - 我可以从 JPA 查询对象获取 SQL 字符串吗?

java - 单元测试-如何使用Spring MockMVC调用soap服务

javascript - Angular 在浏览器上下载 csv 文件

java - 运行默认 Gluon 项目后出错(: dex FAILED)

postgresql - 为什么以及如何将 hibernate_sequence 用于 id 生成器

spring-boot - 如何使用 spring boot web-client 为内容类型 application/x-www-form-urlencoded 的表单数据发布请求