简体   繁体   English

通过在应用程序启动时引用未知的目标实体属性异常来获取映射

[英]Getting mappedBy reference an unknown target entity property exception on app startup

I have two entities, in one of which i am using a PK which is user entered. 我有两个实体,在其中一个实体中,我使用的是用户输入的PK。

I am getting the below exception when starting the springboot app. 启动springboot应用程序时出现以下异常。

Error starting ApplicationContext. 启动ApplicationContext时出错。 To display the auto-configuration report re-run your application with 'debug' enabled. 要显示自动配置报告,请在启用“调试”的情况下重新运行您的应用程序。 2017-09-28 22:06:13.718 $ threadId:1 ERROR namespace:com.shop.tush osbSpringApplication [ hostname:tusbanne.in.ibm.com serviceName:shoppingdetails version:0.0.1-SNAPSHOT transactionId: conversationId: requestTimeStamp: responseTimeStamp: duration:] Application startup failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/shop/tush/DataConfiguration.class]: Invocation of init method failed; 2017-09-28 22:06:13.718 $ threadId:1错误的命名空间:com.shop.tush osbSpringApplication [hostname:tusbanne.in.ibm.com serviceName:shoppingdetails version:0.0.1-SNAPSHOT transactionId:constructionId:requestTimeStamp:responseTimeStamp :持续时间:]应用程序启动失败org.springframework.beans.factory.BeanCreationException:创建在类路径资源[com / shop / tush / DataConfiguration.class]中定义的名称为'entityManagerFactory'的bean时出错:调用init方法失败; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.shop.tush.model.Department.employee in com.shop.tush.model.Employee.departments at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractB 嵌套异常是org.hibernate.AnnotationException:mappedBy通过引用未知目标实体属性:org.springframework.beans.beans.beans.support上com.shop.tush.model.Employee.departments中的com.shop.tush.model.Department.employee org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)。 :483)at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306)at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)at org.springframework org.springframework.beans.factory.support.AbstractB上的.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) eanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) at com.shop.tush.Application.main(Application.java:70) Caused b 于org.org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081)的EANFactory.getBean(AbstractBeanContext.java:1081)在org.org的org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856) org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)上的.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)在org.springframework.boot.SpringApplication.refresh(SpringApplication .java:737)位于org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370)位于org.springframework.boot.SpringApplication.run(SpringApplication.java:314)位于org.springframework.boot.SpringApplication.run( org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)位于com.shop.tush.Application.main(Application.java:70)导致SpringApplication.java:1162) y: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.shop.tush.model.Department.employee in com.shop.tush.model.Employee.departments at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:769) at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:719) at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655) at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623) at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(Entit y:org.hibernate.AnnotationException:mappedBy引用未知目标实体属性:org.hibernate.cfg.annotations.CollectionBinder上com.shop.tush.model.Employee.departments中的com.shop.tush.model.Department.employee。在org.hibernate的org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass(CollectionBinder.java:719)的org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54)的bindStarToManySecondPass(CollectionBinder.java:769)。 org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655)位于org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623)位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)的org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(Entit的MetadataBuildingProcess.java:278) yManagerFactoryBuilderImpl.java:874) at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ... 16 common frames omitted org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)的yManagerFactoryBuilderImpl.java:874)在org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerManagerFactory(Local。 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359)上的.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.Abstract .java:1687)位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)...省略了16个常见框架

My entity classes are as below. 我的实体类如下。

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="EMPLOYEE")
public class Employee {

    @Id
    @Column(name="NAME")
    private String name;

    @Column(name="PHONE_NUMBER")
    private String phoneNumber;

    @OneToMany(mappedBy = "employee")
    private Set<Department> departments = new HashSet<Department>();

    public Employee(String name, String phoneNumber, Set<Department> department) {
        super();
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.departments = department;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public Set<Department> getDepartment() {
        return departments;
    }

    public void setDepartment(Set<Department> department) {
        this.departments = department;
    }

    //equals and hashcode methods overriden



}


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

@Entity
@Table(name="DEPARTMENT")
public class Department {

    @Id
    @Column(name="ID")
    @SequenceGenerator(name="seq",sequenceName="dept_seq", allocationSize=1)
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
    private Long deptId;

    @Column(name="DEPT_NAME")
    private String deptName;

    @Column(name="DEPT_BOSS")
    private String deptBoss;

    @ManyToOne
    @JoinColumn(name = "NAME", nullable = false)
    private Employee employee;


    public Department(Long deptId, String deptName, String deptBoss, Employee employee) {
        super();
        this.deptName = deptName;
        this.deptBoss = deptBoss;
        this.employee = employee;
    }

    public Long getDeptId() {
        return deptId;
    }

    public void setDeptId(Long deptId) {
        this.deptId = deptId;
    }

    public String getDeptName() {
        return deptName;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    public String getDeptBoss() {
        return deptBoss;
    }

    public void setDeptBoss(String deptBoss) {
        this.deptBoss = deptBoss;
    }

    public Employee getEmployee() {
        return employee;
    }

    public void setEmployee(Employee employee) {
        this.employee = employee;
    }


    //OVERRIDE EQUALS AND HASHCODE

}

I am not able to figure out the issue in the code. 我无法在代码中找出问题。

AFAIK Hibernate needs no-arg constructor for each entity. AFAIK Hibernate每个实体都需要no-arg构造函数。 Since both Employee and Department have explicit constructors defined no-arg constructor has to be defined as well 由于EmployeeDepartment都具有定义的显式构造函数,因此也必须定义no-arg构造函数

Remove 去掉

@OneToMany(mappedBy = "employee")
private Set<Department> departments = new HashSet<Department>();

As you don't need them, and one more thing keep all the table names in lowercase only, it's among best practices.I think it will resolve your issue. 由于您不需要它们,还有一件事是将所有表名仅保留为小写,因此属于最佳实践,我认为它将解决您的问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 通过引用继承继承的未知目标实体属性 - mappedBy reference an unknown target entity property with inheritance :mappedBy引用未知的目标实体属性 - : mappedBy reference an unknown target entity property MappedBy两次引用未知的目标实体属性? - MappedBy reference an unknown target entity property twice? JPA mappedBy引用未知目标实体属性 - JPA mappedBy reference an unknown target entity property AnnotationException:mapped通过引用未知目标实体属性 - AnnotationException:mappedBy reference an unknown target entity property 通过引用带有注释的未知目标实体属性 - mappedBy reference an unknown target entity property with annotation mappingBy 引用了一个未知的目标实体属性 - mappedBy reference an unknown target entity property 虽然我得到了真正的实体命名(mappedBy 引用了一个未知的目标实体属性异常) - although true entity naming i get ( mappedBy reference an unknown target entity property exception) 通过引用未知目标实体 - MappedBy reference an unknown target entity 调用init方法失败; 嵌套的异常是org.hibernate.AnnotationException:mappedBy引用了未知的目标实体属性: - Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property:
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM