Spring 遇到对数据库序列[hibernate_sequence]的多个引用
我在构建JHipster应用程序时遇到以下错误: org.springframework.beans.factory.BeanCreationException:创建名为“entityManagerFactory”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]:调用init方法失败;嵌套异常为org.hibernate.HibernateException:试图为“增量大小”设置冲突值时,遇到对数据库序列[hibernate_sequence]的多个引用。找到[1]和[50] 我看到了50,但我不知道1是从哪里来的 自从上次工作以来,我添加了一些在Kotlin文件中定义的新实体Spring 遇到对数据库序列[hibernate_sequence]的多个引用,spring,hibernate,jpa,spring-boot,Spring,Hibernate,Jpa,Spring Boot,我在构建JHipster应用程序时遇到以下错误: org.springframework.beans.factory.BeanCreationException:创建名为“entityManagerFactory”的bean时出错,该bean在类路径资源[org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]:调用init方法失败;嵌套异常为org.hibernate.Hibernat
我正在努力将as one功能添加到我的应用程序中。演示自行构建并运行,没有任何问题。为了达到现在的水平,我将演示中的代码复制到我的应用程序中,并调整了一些内容,主要与用户实体有关。因为JHipster不允许向用户添加字段,所以我创建了一个与它有1:1关系的Author实体。这本身可能与这个错误无关。我认为这段新代码中一定有东西试图创建一个序列,默认的增量大小是一个。您可能缺少一些必需的标记,因为JHipster对项目设置做了很多假设。这是使我的项目正常运行所必需的:
@Entity
@Table(name = "tags")
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private int id;
}
标准hibernate允许您在不指定策略或生成器的情况下离开,但由于它已配置,您需要进行匹配。问题是您的sequence generator注释没有指定sequenceName,因此它在数据库中使用commonhibernate\u sequence序列。序列有其增量,您显然试图指定不同的 因此,即使您为表指定了序列生成器,它实际上也与其他生成器共享,“1”来自此hibernate_序列
只要试着命名您的序列,使其在数据库中有自己的实体,您就可以使用任何增量大小 我也有同样的问题,一些实体有:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
而其他一些实体:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
我将项目中的所有实体都更改为第一种类型,即AUTO,并去掉了带有@Id的抽象类DomainEntityBase,这就解决了这个问题。
另外,我正在使用jhipster。
使用不同于“hibernate_sequence”的名称在数据库中创建一个新序列,然后在@SequenceGenerator中使用该序列,并指定创建序列的架构的名称。例如,如果您以这种方式定义了架构:
CREATE SEQUENCE wallet.wallet_sequence
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
那么您的实体注释应该如下所示:
@身份证
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“hibernate_seq”)
@SequenceGenerator(name=“hibernate\u seq”,sequenceName=“wallet\u sequence”,schema=“wallet”)