mappedBy通过注释引用一个未知的目标实体属性 [英] mappedBy reference an unknown target entity property with annotation

查看:124
本文介绍了mappedBy通过注释引用一个未知的目标实体属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试将Observable及其观察者存储到数据库中。我在执行过程中收到


org.hibernate.AnnotationException:mappedBy引用未知目标实体属性




当然我使用google并找到了一些很好的答案。

因此我添加了注释mappedBy,targetEntity,fetch和级联。


但我仍然遇到同样的错误。我尝试了迄今为止我所能找到的一切,但都没有成功。这可能只是一个未成年人的想法,我希望你能帮助我。 (我使用Spring Boot)



ObservableImpl

  public class ObservableImpl extends Observable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
私人字符串名称;
@OneToMany(mappedBy =oservableImpl,targetEntity = ObserverImpl.class,cascade = CascadeType.ALL,fetch = FetchType.LAZY)
List< ObserverImpl> observerList = new LinkedList<>();


public ObservableImpl(String name){
this.name = name;


protected ObservableImpl(){
}

@Override
public synchronized void addObserver(Observer o){
super.addObserver(O);
observerList.add((ObserverImpl)o);
}

@Override
public synchronized void deleteObserver(Observer o){
super.deleteObserver(o);
observerList.remove(o);
}

public void change(){
setChanged();
notifyObservers();
}

@Override
public boolean equals(Object o){
if(this == o)return true;
if(o == null || getClass()!= o.getClass())return false;

ObservableImpl that =(ObservableImpl)o;

返回id == that.id;
}

@Override
public String toString(){
returnObservableImpl {+
ID =+ id +
'}';
}
}

ObserverImpl

  @Entity 
public class ObserverImpl implements Observer {

@Id
@GeneratedValue( strategy = GenerationType.AUTO)
private Long ID;
私人字符串名称;

public Long getID(){
return ID;
}

public void setID(Long ID){
this.ID = ID;
}

public String getName(){
return name;
}

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

public ObserverImpl(String name){
this.name = name;


protected ObserverImpl(){
}


@Override
public String toString(){
返回ObserverImpl {+
ID =+ ID +
'}';
}

@Override
public boolean equals(Object o){
if(this == o)return true;
if(o == null || getClass()!= o.getClass())return false;

ObserverImpl observer =(ObserverImpl)o;

返回ID == observer.ID;
}


@Override
public void update(Observable o,Object arg){
System.out.println(this);
}
}

错误讯息:

  2017-06-11 14:40:57.032 INFO 21156 --- [main] cehibernate.HibernateApplication:No active profile set ,回落到默认配置文件:默认
2017-06-11 14:40:57.061信息21156 --- [main] ationConfigEmbeddedWebApplicationContext:刷新org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4516af24:启动日期[孙军11 14:40:57 CEST 2017];上下文层次结构的根
2017-06-11 14:40:57.826信息21156 --- [main] trationDelegate $ BeanPostProcessorChecker:类型为[org.springframework.transaction的bean'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' .annotation.ProxyTransactionManagementConfiguration $$ EnhancerBySpringCGLIB $$ cfcf04d]没有资格被所有BeanPostProcessors处理(例如:不适合自动代理)
2017-06-11 14:40:58.032信息21156 --- [main] sbcetTomcatEmbeddedServletContainer:使用端口初始化Tomcat:8080(http)
2017-06-11 14:40:58.039信息21156 --- [main] o.apache.catalina.core.StandardService:启动服务Tomcat
2017-06-11 14:40:58.039信息21156 --- [main] org.apache.catalina.core.StandardEngine:启动Servlet引擎:Apache Tomcat / 8.5.14
2017 -06-11 14:40:58.091信息21156 --- [ost-startStop-1] oaccC [Tomcat]。[localhost]。[/]:初始化Spring嵌入式WebApplicationContext
2017-06-11 14:40:58.091信息21156 --- [ost-startStop-1] osweb.context.ContextLoader:根WebApplicationContext:初始化在1031年完成ms
2017 -06-11 14:40:58.163信息21156 --- [ost-startStop-1] osbwservlet.ServletRegistrationBean:将servlet:'dispatcherServlet'映射到[/]
2017-06-11 14:40:58.165 INFO 21156 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean:映射过滤器:'characterEncodingFilter'到:[/ *]
2017-06-11 14:40:58.166信息21156 --- [ost -startStop-1] osbwservlet.FilterRegistrationBean:映射过滤器:'hiddenHttpMethodFilter'到:[/ *]
2017-06-11 14:40:58.166信息21156 --- [ost-startStop-1] osbwservlet .FilterRegistrationBean:映射过滤器:'httpPutFormContentFilter'到:[/ *]
2017-06-11 14:40:58.166信息21156 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean:映射过滤器:' requestContextFil ter'to:[/ *]
2017-06-11 14:40:58.387信息21156 --- [main] j.LocalContainerEntityManagerFactoryBean:构建JPA容器EntityManagerFactory for persistence unit'default'
2017- 06-11 14:40:58.394信息21156 --- [main] o.hibernate.jpa.internal.util.LogHelper:HHH000204:处理PersistenceUnitInfo [
名称:默认
...]
2017-06-11 14:40:58.428信息21156 --- [main] org.hibernate.Version:HHH000412:Hibernate Core {5.0.12.Final}
2017-06-11 14:40: 58.428信息21156 --- [main] org.hibernate.cfg.Environment:HHH000206:找不到hibernate.properties
2017-06-11 14:40:58.429 INFO 21156 --- [main] org.hibernate。 cfg.Environment:HHH000021:字节码提供程序名称:javassist
2017-06-11 14:40:58.449信息21156 --- [main] o.hibernate.annotations.common.Version:HCANN000001:Hibernate Commons Annotations {5.0 .1.Final}
2017-06-11 14:40:58.501信息21156 --- [main] org.hibernate.dialect.Dialect:HHH000400:使用方言:org.hibernate.dialect.H2Dialect
2017-06-11 14 :40:58.596警告21156 --- [main] ationConfigEmbeddedWebApplicationContext:在上下文初始化期间遇到的异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建在类路径资源中定义的名为'entityManagerFactory'的bean时出错[org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaAutoConfiguration.class]:调用init方法失败;嵌套异常是org.hibernate.AnnotationException:mappedBy引用一个未知的目标实体属性:com.example.hibernate.obs.ObserverImpl.oservableImpl in com.example.hibernate.obs.ObservableImpl.observerList
2017-06-11 14 :40:58.598信息21156 --- [main] o.apache.catalina.core.StandardService:停止服务Tomcat
2017-06-11 14:40:58.606信息21156 --- [main] utoConfigurationReportLoggingInitializer:

启动ApplicationContext时出错。要显示自动配置报告,请启用'debug'重新运行您的应用程序。
2017-06-11 14:40:58.612错误21156 --- [main] osboot.SpringApplication:应用程序启动失败

org.springframework.beans.factory.BeanCreationException:创建错误在类路径资源[org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaAutoConfiguration.class]中定义名称为'entityManagerFactory'的bean:调用init方法失败;嵌套异常是org.hibernate.AnnotationException:mappedBy引用一个未知的目标实体属性:com.example.hibernate.obs.ObserverImpl.observerList中的com.example.hibernate.obs.ObserverImpl.oservableImpl org.springframework.beans中的
。org.springframework.beans.factory.support中的.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)〜[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
。 AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)〜[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory .java:483)〜[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:306 )〜[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
在org.springframework .beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)〜[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
在org.springframework.beans.factory。 support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)〜[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:197)〜[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081) 〜[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
在org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856)〜[spring-context-4.3 .8.RELEASE.jar:4.3.8.RELEASE]
在org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542)〜[spring-context-4.3.8.RELEASE.jar: 4.3.8。 RELEASE]
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)〜[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
在org.springframework.boot.SpringApplication上使用org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737)[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
。在Spring中,SpringContext(SpringApplication.java:370)[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:314)[spring -boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)[spring-boot-1.5.3.RELEASE.jar :1.5.3.RELEASE]
在org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
在com.example.hibernate.HibernateApplication.main(HibernateApplication.java:19)[classes /:na]
引起:org.hibern ate.AnnotationException:mappedBy引用未知目标实体属性:com.example.hibernate.obs.ObservableImpl.observerList中的com.example.hibernate.obs.ObserverImpl.oservableImpl org.hibernate.cfg.annotations.CollectionBinder中的
。 bindStarToManySecondPass(CollectionBinder.java:769)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
at org.hibernate.cfg.annotations.CollectionBinder $ 1.secondPass(CollectionBinder.java: 719)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54)〜[hibernate-core-5.0 .12.Final.jar:5.0.12.Final]
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655)〜[hibernate-core-5.0.12.Final.jar: 5.0.12.Final]
在org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)〜[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
at org。 hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)〜[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
at org.hibernate.jpa.boot .internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)〜[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider。在org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory中创建一个createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)〜[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
(LocalContainerEntityManagerFactoryBean.java:353 )〜[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.orm.jpa.AbstractEntityM anagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370)〜[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java :359)〜[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687)〜[ spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624)〜[spring-beans-4.3 .8.RELEASE.jar:4.3.8.RELEASE]
...省略16个常见框架


以退出代码1


$ b

非常感谢。

HibernateApplication

  @SpringBootApplication 
公共类HibernateApplica {


private static final Logger log = LoggerFactory.getLogger(HibernateApplication.class);

public static void main(String [] args){
SpringApplication.run(HibernateApplication.class);


$ b @Bean
public CommandLineRunner addObservables(ObserveableRepository存储库){
return(args) - > {
useObserver(repository);

//获取所有客户
log.info(使用findAll()发现的可观察对象:);
log.info(-------------------------------);
for(ObservableImpl observable:repository.findAll()){
log.info(observable.toString());
observable.change();
}
log.info();

};


private void useObserver(ObserveableRepository repository){
ObservableImpl observable = new ObservableImpl(1);
observable.addObserver(new ObserverImpl(firstObserver));
observable.addObserver(new ObserverImpl(secondObserver));
observable.addObserver(new ObserverImpl(thirdObserver));
repository.save(observable);
}
}

ObserveableRepository

  public interface ObserveableRepository extends CrudRepository< ObservableImpl,Long> {

}

application.properties

  spring.datasource.url = jdbc:h2:file:〜/ test3; DB_CLOSE_ON_EXIT = FALSE; AUTO_RECONNECT = TRUE 
spring.datasource.username = admin
spring.datasource.password =密码
spring.datasource.driver-class-name = org.h2.Driver
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto =更新
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect


解决方案

我建议你重命名你的实体并给他们简单和理解的名字。这可以让你不必关心其领域的复杂定义和可能的错误。



例如:

  @Entity 
public class Experiment extends Observable {
// ...

@OneToMany(mappedBy =experiment)
private Set< Experimenter> experimenters = new HashSet<>();

// ...
}

@Entity
public class实验者扩展观察者{
// ...

@ManyToOne
私人实验实验;

// ...
}

这里有一个经典的双向 OneToMany协会






要从IDE访问H2数据库,您可以使用这个答案。


I try to store an Observable and its observers into a database. I receive during execution

org.hibernate.AnnotationException: mappedBy reference an unknown target entity property

Of course I used google and found some good answer.

So I added to the annotation mappedBy, targetEntity, fetch and cascade.

But I still got the same error. I tried so far actually everything I could find with google with no success. It is probably only a minor think and I hope you can help me. (I use Spring Boot)

ObservableImpl

@Entity
public class ObservableImpl extends Observable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
    @OneToMany(mappedBy = "oservableImpl", targetEntity = ObserverImpl.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    List<ObserverImpl> observerList = new LinkedList<>();


    public ObservableImpl(String name) {
        this.name = name;
    }

    protected ObservableImpl() {
    }

    @Override
    public synchronized void addObserver(Observer o) {
        super.addObserver(o);
        observerList.add((ObserverImpl) o);
    }

    @Override
    public synchronized void deleteObserver(Observer o) {
        super.deleteObserver(o);
        observerList.remove(o);
    }

    public void change() {
        setChanged();
        notifyObservers();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ObservableImpl that = (ObservableImpl) o;

        return id == that.id;
    }

    @Override
    public String toString() {
        return "ObservableImpl{" +
                "ID=" + id +
                '}';
    }
}

ObserverImpl

@Entity
public class ObserverImpl implements Observer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long ID;
    private String name;

    public Long getID() {
        return ID;
    }

    public void setID(Long ID) {
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

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

    public ObserverImpl(String name) {
        this.name = name;
    }

    protected ObserverImpl() {
    }


    @Override
    public String toString() {
        return "ObserverImpl{" +
                "ID=" + ID +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        ObserverImpl observer = (ObserverImpl) o;

        return ID == observer.ID;
    }


    @Override
    public void update(Observable o, Object arg) {
        System.out.println(this);
    }
}

Error Message:

2017-06-11 14:40:57.032  INFO 21156 --- [           main] c.e.hibernate.HibernateApplication       : No active profile set, falling back to default profiles: default
2017-06-11 14:40:57.061  INFO 21156 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4516af24: startup date [Sun Jun 11 14:40:57 CEST 2017]; root of context hierarchy
2017-06-11 14:40:57.826  INFO 21156 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$cfcf04d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2017-06-11 14:40:58.032  INFO 21156 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2017-06-11 14:40:58.039  INFO 21156 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2017-06-11 14:40:58.039  INFO 21156 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.14
2017-06-11 14:40:58.091  INFO 21156 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2017-06-11 14:40:58.091  INFO 21156 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1031 ms
2017-06-11 14:40:58.163  INFO 21156 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2017-06-11 14:40:58.165  INFO 21156 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2017-06-11 14:40:58.166  INFO 21156 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2017-06-11 14:40:58.166  INFO 21156 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2017-06-11 14:40:58.166  INFO 21156 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2017-06-11 14:40:58.387  INFO 21156 --- [           main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2017-06-11 14:40:58.394  INFO 21156 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [
    name: default
    ...]
2017-06-11 14:40:58.428  INFO 21156 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate Core {5.0.12.Final}
2017-06-11 14:40:58.428  INFO 21156 --- [           main] org.hibernate.cfg.Environment            : HHH000206: hibernate.properties not found
2017-06-11 14:40:58.429  INFO 21156 --- [           main] org.hibernate.cfg.Environment            : HHH000021: Bytecode provider name : javassist
2017-06-11 14:40:58.449  INFO 21156 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2017-06-11 14:40:58.501  INFO 21156 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2017-06-11 14:40:58.596  WARN 21156 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.example.hibernate.obs.ObserverImpl.oservableImpl in com.example.hibernate.obs.ObservableImpl.observerList
2017-06-11 14:40:58.598  INFO 21156 --- [           main] o.apache.catalina.core.StandardService   : Stopping service Tomcat
2017-06-11 14:40:58.606  INFO 21156 --- [           main] utoConfigurationReportLoggingInitializer : 

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2017-06-11 14:40:58.612 ERROR 21156 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.example.hibernate.obs.ObserverImpl.oservableImpl in com.example.hibernate.obs.ObservableImpl.observerList
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1081) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:856) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) ~[spring-context-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.3.RELEASE.jar:1.5.3.RELEASE]
    at com.example.hibernate.HibernateApplication.main(HibernateApplication.java:19) [classes/:na]
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.example.hibernate.obs.ObserverImpl.oservableImpl in com.example.hibernate.obs.ObservableImpl.observerList
    at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:769) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:719) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:54) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1655) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1623) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.8.RELEASE.jar:4.3.8.RELEASE]
    ... 16 common frames omitted


Process finished with exit code 1

Thank you a lot.

HibernateApplication

@SpringBootApplication
public class HibernateApplication {


    private static final Logger log = LoggerFactory.getLogger(HibernateApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(HibernateApplication.class);
    }


    @Bean
    public CommandLineRunner addObservables(ObserveableRepository repository) {
        return (args) -> {
            useObserver(repository);

            // fetch all customers
            log.info("Observables found with findAll():");
            log.info("-------------------------------");
            for (ObservableImpl observable : repository.findAll()) {
                log.info(observable.toString());
                observable.change();
            }
            log.info("");

        };
    }

    private void useObserver(ObserveableRepository repository) {
        ObservableImpl observable = new ObservableImpl("1");
        observable.addObserver(new ObserverImpl("firstObserver"));
        observable.addObserver(new ObserverImpl("secondObserver"));
        observable.addObserver(new ObserverImpl("thirdObserver"));
        repository.save(observable);
    }
}

ObserveableRepository

public interface ObserveableRepository extends CrudRepository<ObservableImpl, Long> {

}

application.properties

spring.datasource.url=jdbc:h2:file:~/test3;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE
spring.datasource.username=admin
spring.datasource.password=password
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect

解决方案

I recommend you to rename your entities and give them "simple" and comprehended names. This will allow you not take care about the complex definitions of their fields and possible errors.

For example:

@Entity
public class Experiment extends Observable {
    //...

    @OneToMany(mappedBy = "experiment")
    private Set<Experimenter> experimenters = new HashSet<>();

    //...
} 

@Entity
public class Experimenter extends Observer {
    //...

    @ManyToOne
    private Experiment experiment;

    //...
} 

So we had here a classic bidirectional OneToMany association


To get access to H2 database from IDE you can use this answer.

这篇关于mappedBy通过注释引用一个未知的目标实体属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆