2016-12-16 115 views
0

我的POJO有一个属性name,它应该是唯一的,因此我使用@Column(unique = true)对它进行了注释。长度默认为255,我使用MySQL 5.5,数据库排序规则设置为utf8mb4_bin。我知道我无法在列上指定唯一约束,但是我想知道为什么我的日志文件中没有关于创建索引失败的警告/错误。 MySQL的响应索引创建具有手动尝试“#1071 - 指定的键过长,最大密钥长度为767个字节”这样至少某种暗示应该是可见的,不应该吗?在MySQL中创建JPA唯一索引默认失败

有没有一种方法可以在运行时处理/捕获这些类型的错误?例如。记录错误消息,以便开发人员知道发生了什么问题。

我使用的弹簧引导起动父母为我的项目Maven的父母1.4.2.RELEASE和包括弹簧引导起动数据JPA添加所有相关的依赖关系。这包括spring-data-jpa-1.10.5.RELEASE和hibernate-core-5.0.11。

回答

1

误差分别你可以索引的最大值的255个或191个字符,是由于

InnoDB的具有767个字节的最大索引长度,所以对于UTF8或utf8mb4列。如果您当前使用索引超过191个字符的utf8列,则需要索引较少数量的字符。 https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-conversion.html

您ARA使用字段255和最大的utf8mb4_bin是191,所以你有错误不被创建索引o如果这是一个警告,它会创建一个最大值索引到191.

+0

亲爱的罗密欧,感谢您的反馈。然而,我的问题是关注事物的Java方面。我指出,我知道底层的MySQL问题的,我想知道如何处理模式创建过程中的错误不提出任何红旗无论是在我的代码也不在我的日志文件。 – oschlueter

+0

对不匹配感到抱歉。我有相同的版本与'spring.jpa.hibernate.ddl-AUTO TEST =创造滴',并有记录'org.hibernate.tool.hbm2ddl.SchemaExport错误:指定的键过长;最大密钥长度是767字节' –