构建我的JHipster应用程序时出现此错误:
org.springframework.beans.factory.BeanCreationException:在类路径资源中定义名称为'entityManagerFactory'的bean时出错[org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaAutoConfiguration.class]:init方法的调用失败;嵌套异常是org.hibernate.HibernateException:遇到对数据库序列[hibernate_sequence]的多次引用,试图为'increment size'设置冲突的值。找到[1]和[50]
我看到50 here,但我不知道1来自哪里。
自上次使用以来,我在these Kotlin文件中添加了一些新实体。
我正在努力将Thinkster conduit demo作为一项功能添加到我的应用程序中。它本身就可以毫无问题地构建和运行。为了得到我现在的位置,我将演示中的代码复制到我的应用程序中并调整了一些内容,主要与用户实体相关。由于JHipster不允许您向User添加字段,因此我创建了一个与它具有1:1关系的Author实体。这本身可能与此错误没有任何关系。我认为这个新代码中的某些东西必须尝试创建一个序列,默认增量大小是一个。
答案 0 :(得分:2)
由于JHipster对项目设置做出了很多假设,因此您可能遗漏了一些必需的标签。这是让我的项目工作所必需的:
@Entity
@Table(name = "tags")
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private int id;
}
标准的休眠可以让你在不指定策略或生成器的情况下逃脱,但由于它已经配置,你需要匹配。
答案 1 :(得分:2)
问题是您的序列生成器注释没有指定 sequenceName ,因此它在数据库中使用常见的 hibernate_sequence 序列。序列有增量,你显然试图指定一个不同的。
因此,即使您为表格指定了序列生成器,它实际上也与您的其他生成器和" 1"来自这个hibernate_sequence。
只是尝试命名您的序列,以便它在数据库中有自己的实体,您应该可以使用任何增量大小。
答案 2 :(得分:1)
我遇到了同样的问题,有些实体遇到了:
@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。
答案 3 :(得分:0)
使用不同于“ hibernate_sequence”的名称在数据库中创建一个新序列,然后在@SequenceGenerator中使用该序列,并指定在其下创建该序列的模式的名称。例如,如果您以这种方式定义了模式:
CREATE SEQUENCE wallet.wallet_sequence
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
然后您的实体注释应如下:
@Id @GeneratedValue(策略= GenerationType.SEQUENCE,生成器=“ hibernate_seq”) @SequenceGenerator(name =“ hibernate_seq”,sequenceName =“ wallet_sequence”,schema =“ wallet”)