一、问题
在使用JPA注解时javax.persistence.UniqueConstraint时,按照如下方式编写代码时,启动Spring boot并没有创建uk_distributor_code_serial_date这个key。
@Proxy(lazy = false)
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Entity
@Table(name = "cert_serial_number", uniqueConstraints = {
@UniqueConstraint(name = "uk_distributor_code_serial_date", columnNames = {"distributorCode", "serialDate"})
})
@Builder
public class CertSerialNumber extends BaseEntity {
private String distributorCode;
private String serialDate;
private String transId;
private Long seq;
}
二、知识点
查询资料:
@uniqueConstraints无法创建索引_盲打费劲的博客-CSDN博客
发现是因为数据库对索引字段的长度有限制,
MySQL数据库不同的搜索引擎,索引的长度限制不同。
innoDB引擎下单列索引的长度不能超过767个字节,联合索引的长度之和不能超过3072个字节。
String类型字段如果不指定长度, 映射到数据库的默认长度是255个字符。
三、问题分析
(1)代码中String类型字段默认长度为255个字符,
(2)数据库使用的引擎为innoDB,字符集为utf8mb4。
这样的话,单列索引长度为 255*4 = 1020 > 767,所以创建索引失败。
四、解决方案
代码中显示设置字段长度,不大于191个字符: