Spring Boot 2 Hibernate 5 @Embeddable属性在H2中生成错误的字段大小(create-drop)

时间:2018-04-30 15:55:40

标签: java hibernate spring-boot hibernate-validator embeddable

我正在使用带有H2 db的默认Hibernate版本的Spring Boot 2(2.0.1.RELEASE),并且我在使用@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中创建表。 '名称中的列大小' Publisher中的属性使用@Size注释中的最大值正确设置为150。

忽略嵌入式地址实体的@Size注释中的最大值,并将所有4个字段的最大值设置为255个字符。

这是预期的行为还是应该将嵌入字段中的db列设置为Address实体中@Size注释的最大值?

我知道我可以使用@Column注释的长度值设置它,但我希望在没有额外的@Column注释的情况下使其工作。

很抱歉,如果这是重复的,但在我决定在此处发布我的问题之前,我搜索了几个小时。

谢谢 卡兹

1 个答案:

答案 0 :(得分:1)

对于已审核,问题是@Valid字段缺少Address注释:

@NotNull
@Valid
private Address address;

如果没有此注释,则不启用级联,并忽略Address中的约束注释。