【问题标题】:Java Hibernate MariaDB DDL executionJava Hibernate MariaDB DDL 执行
【发布时间】:2019-03-05 10:37:20
【问题描述】:

我正在将 Web 应用程序从 Windows 机器部署到运行 MariaDB 10.1.26 的 debian 服务器(一切都在开发机器上运行)。问题是一些 DDL 没有执行。有问题的类是用户类:

@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 键而发生的。我该如何解决这个问题?

【问题讨论】:

    标签: java mysql hibernate mariadb


    【解决方案1】:

    尝试以下解决方案之一。

    解决方案 1:

    在您的休眠配置文件中使用以下代码行添加方言。

    &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MariaDBDialect&lt;/property&gt;

    解决方案 2:

    当我们尝试使用可能保留的名称“用户”(Mariadb)创建 JPA 实体时出现此错误。 我们可以通过@Table注解改变表名来解决这个问题:

    @Entity
    @Table(name="users")
    public class User {..}
    

    或者手动更改表名。

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 2010-09-21
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多