java hibernate mariadb ddl执行

ou6hu8tu  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(432)

我正在将一个web应用程序从windows机器部署到运行mariadb 10.1.26的debian服务器(一切都在dev机器上运行)。问题是有些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键。我怎样才能解决这个问题?

lpwwtiir

lpwwtiir1#

尝试以下解决方案之一。
解决方案1:
在hibernate配置文件的下面一行代码中添加方言。 <property name="hibernate.dialect">org.hibernate.dialect.MariaDBDialect</property> 解决方案2:
我们在尝试创建名为“user”(mariadb)的jpa实体时遇到这个错误,这个名称可能是保留的。我们可以通过@table annotation更改表名来解决此问题:

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

或者手动更改表名。

相关问题