创建名称'entityManagerFactory'类路径资源中定义的 Bean 时出错。原因:实体映射中出现重复列



我正在尝试与现有实体建立一些关系。在我的表之间添加了几个ManyToOne关系之后。在删除了我以前的表之后,Spring建议id(应该使用insert="false"update="false"进行映射)。不太确定出了什么问题

我的实体:

public class Madeen implements Serializable {
// TODO update to oracle sequence
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@CreatedDate
@NotNull
@Column(name = "created_date", updatable = false)
private Instant createdDate = Instant.now();
@ManyToOne
@NotNull
@JoinColumn(name = "id")
private Organization organization;
@NotNull
@Column(name = "person_id")
private String personId;
@NotNull
@Column(name="status")
private String status;
public class Debts {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@Column(name = "person_id")
private String personId;
@NotNull
@ManyToOne
@JoinColumn(name= "id")
private Madeen MadeenId;
@CreatedDate
@NotNull
@Column(name = "created_date", updatable = false)
private Instant createdDate = Instant.now();
@NotNull
@Column(name = "updated_date")
private Instant updatedDate;
@NotNull
@Column(name= "debt_amount")
private double debtAmount;
@ManyToOne
@NotNull
@JoinColumn(name = "id")
private Organization organization;

}

错误

org.springframework.beans.factory.BeanCreationException:创建类路径资源[org/springframeter/boot/autoconfig/orm/jpa/Hibernate JpaConfiguration.class]中定义的名称为"entityManagerFactory"的bean时出错:调用init方法失败;嵌套异常为javax.persistence.PersistenceException:[PersistenceUnit:default]无法构建Hibernate SessionFactory;嵌套异常为org.hubinate.MappingException:实体com.tcc.madeen.entity.madeen column:id的映射中重复列(应使用insert="false"在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)~[spring-beans-5.321.jar:5.3.21]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)~[spring-beans-5.321.jar:5.3.21]网址:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)~[spring-beans-5.321.jar:5.3.21]在org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)~[spring-beans-5.321.jar:5.3.21]在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)~[spring-beans-5.321.jar:5.3.21]网址:org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)~[spring-beans-5.321.jar:5.3.21]网址:org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)~[spring-beans-5.321.jar:5.3.21]网址:org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154)~[spring-context-5.3.21.jar:5.3.21]位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908)~[spring-context-5.3.21.jar:5.3.21]网址:org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)~[spring-context-5.3.21.jar:5.3.21]网址:org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplication context.java:147)~[spring-boot-2.7.1.jar:2.7.1]网址:org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734)~[spring-boot-2.7.1.jar:2.7.1]网址:org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408)~[spring-boot-2.7.1.jar:2.7.1]网址:org.springframework.boot.SpringApplication.run(SpringApplication.java:308)~[spring-boot-2.7.1.jar:2.7.1]网址:org.springframework.boot.SpringApplication.run(SpringApplication.java:1306)~[spring-boot-2.7.1.jar:2.7.1]网址:org.springframework.boot.SpringApplication.run(SpringApplication.java:1295)~[spring-boot-2.7.1.jar:2.7.1]网址:com.tcc.madeen.MadeenApplication.main(MadeenApplication.java:10)~[classes/:na]导致原因:javax.persistence.PersistenceException:[PersistenceUnit:default]无法构建Hibernate SessionFactory;嵌套异常为org.hubinate.MappingException:实体com.tcc.madeen.entity.madeen column:id的映射中重复列(应使用insert="false"在org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:421)~[spring-orm-5.3.21.jar:5.3.21]在org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)~[spring-orm-5.3.21.jar:5.3.21]在org.springframework.om.jpa.LocalContainerEntityManagerFactoryBean.fafterPropertiesSet(LocalContainerEntityManager FactoryBean.java:341)~[spring-orm-5.3.21.jar:5.3.21]网址:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863)~[spring-beans-5.321.jar:5.3.21]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800)~[spring-beans-5.321.jar:5.3.21]…省略了16个常用帧由:org.hibernate.MappingException引起:实体com.tcc.madeen.entity.madeen column:id的映射中重复列位于org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:895)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]位于org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:913)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]位于org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:935)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]位于org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:637)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]在org.hibernate.mapping.RootClass.validate(RootClass.java:267)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]位于org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:359)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]位于org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:314)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]位于org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilder Impl.java:471)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBBuilderImpl.java:1498)~[hibernate-core-56.6.9.Final.jar:5.6.9.Final]网址:org.springframework.om.jpa.vendor.SpringHibernate JpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernate jpa PersistenceProvider.java:58)~[spring-orm-5.3.21.jar:5.3.21]位于org.springframework.om.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManager FactoryBean.java:365)~[spring-orm-5.3.21.jar:5.3.21]在org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)~[spring-orm-5.3.21.jar:5.3.21]…20个普通帧省略

这是因为@JoinColumn(name = "id")高于organization

joincolumn的name属性是指存储organization_id的Madeen表中的数据库列。因为Madeen已经有了自己主键的列id,所以会出现这个错误。

将Madeen 中的@JoinColumn(name = "id")更改为@JoinColumn(name = "organization_id")

并为组织和制造的债务做同样的事情

有关更多信息,请查看本文。

最新更新