首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate无法创建表hibernate_sequences

Hibernate无法创建表hibernate_sequences
EN

Stack Overflow用户
提问于 2016-11-19 00:58:10
回答 2查看 1.2K关注 0票数 1

Hibernate版本:

代码语言:javascript
复制
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.4.Final</version>
</dependency>

ExportDB.java

代码语言:javascript
复制
public class ExportDB {
    public static void main(String[] args) {
        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
        Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();
        SchemaExport schemaExport = new SchemaExport();
        schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata);
    }
}

运行ExportDB.java

代码语言:javascript
复制
2016-11-19 00:22:12,845 WARN [org.hibernate.orm.connections.pooling] - HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Hibernate: drop table if exists hibernate_sequences
Hibernate: drop table if exists user
Hibernate: create table hibernate_sequences (sequence_name varchar(255) not null, sequence_next_hi_value bigint, primary key (sequence_name))
Hibernate: create table user (id bigint not null, balance decimal(20,4) default 0.00, createTime time, displayName varchar(64), password varchar(64), username varchar(64), primary key (id))
Hibernate: alter table user add constraint UK_7kuje5s4lbyq9qyv1r9ecm2it unique (username)

数据库:

代码语言:javascript
复制
MariaDB [cms]> show tables;
+----------------+
| Tables_in_cms |
+----------------+
| investor       |
+----------------+
1 row in set (0.00 sec)

当我使用打印的SQL创建hibernate_sequences

代码语言:javascript
复制
MariaDB [cms]> create table hibernate_sequences (sequence_name varchar(255) not null, next_val bigint, primary key (sequence_name));
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

如何让ExportDB.java可以创建hibernate_sequences

EN

回答 2

Stack Overflow用户

发布于 2016-11-19 02:32:05

您使用的是utf8mb4,对吗?您使用的是5.6或更早的版本吗?

计划A:升级到5.7。

B计划:将255减少到191或更少。(你真的需要255吗?)

计划C:改用CHARACTER SET utf8 (假设你不需要Emoji或中文)

计划D:通常“序列”是一些数字的东西。如果是这样的话,INT UNSIGNEDBIGINT UNSIGNED就不能工作吗?

票数 1
EN

Stack Overflow用户

发布于 2018-01-30 11:08:15

在我的例子中,这是由于列定义上的utf8mb4字符集造成的。

primary_key中不能使用过长的varchar列。

因此,我们可以手动创建表并对其进行更正。

下面的create table查询可以做到这一点。

代码语言:javascript
复制
create table hibernate_sequences (
   sequence_name varchar(255) CHARACTER SET utf8 not null ,
    next_val bigint,
    primary key (sequence_name)
) engine=MyISAM
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40682355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档