我正在将一个web应用程序从windows机器部署到运行MariaDB 10.1.26的debian服务器上(一切都在dev机器上运行)。问题是有些DDL没有被执行。有问题的类是user类:
@Entity
public class User {
@Id
@Type(type = "uuid-char")
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
private UUID id;
private String firstname;
private String lastname;
@Column(unique = true)
private String emailAddress;
private String passwordHash;
}
我使用的hibernate属性是:
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
我得到的错误是这样的:
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL via JDBC Statement
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes
我假设这是由于UUID密钥造成的。我该如何解决这个问题呢?
发布于 2018-09-30 04:40:12
请尝试以下解决方案之一。
解决方案1:
使用hibernate配置文件中的以下代码行添加方言。
<property name="hibernate.dialect">org.hibernate.dialect.MariaDBDialect</property>
解决方案2:
当我们尝试创建名为"User“(Mariadb)的JPA实体时,我们得到了这个错误,这个实体可能是保留的。我们可以通过@Table注释更改表名来解决这个问题:
@Entity
@Table(name="users")
public class User {..}
或者手动更改表名。
https://stackoverflow.com/questions/52572124
复制相似问题