Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate:注释异常:未知的mappedBy位于。。。反向(mappedBy)双向@OneToOne关联上引用的属性未知_Hibernate_Jpa_Mapping_One To One_Bidirectional - Fatal编程技术网

Hibernate:注释异常:未知的mappedBy位于。。。反向(mappedBy)双向@OneToOne关联上引用的属性未知

Hibernate:注释异常:未知的mappedBy位于。。。反向(mappedBy)双向@OneToOne关联上引用的属性未知,hibernate,jpa,mapping,one-to-one,bidirectional,Hibernate,Jpa,Mapping,One To One,Bidirectional,我有以下简单的设计: (来源:) 这基本上是JPA不支持的非不相交继承的解决方法。人可以自己存在,但也可以选择单个球员实体、单个教练实体或两个实体来完成逻辑 以下是易于理解的JPA2.0映射(请注意@Id转发关联): 球员和教练实体类几乎相同 这里的问题是两个双向关联(mappedBy)。这些映射与EclipseLink完美配合,但Hibernate却以某种方式与AnnotationException发生冲突: Exception in thread "main" java

我有以下简单的设计:


(来源:)

这基本上是JPA不支持的非不相交继承的解决方法。人可以自己存在,但也可以选择单个球员实体、单个教练实体或两个实体来完成逻辑

以下是易于理解的JPA2.0映射(请注意@Id转发关联):

球员和教练实体类几乎相同

这里的问题是两个双向关联(mappedBy)。这些映射与EclipseLink完美配合,但Hibernate却以某种方式与AnnotationException发生冲突:

Exception in thread "main" javax.persistence.PersistenceException: [PersistenceUnit: persons] Unable to configure EntityManagerFactory
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:374)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
    at tld.persons.Main.main(Main.java:32)
Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: tld.persons.model.Person.coach, referenced property unknown: tld.persons.model.Coach.person
    at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:159)
    at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1686)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1393)
    at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1345)
    at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1477)
    at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1096)
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:278)
    at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:362)
    ... 4 more
当切换到旧式JPA1.0映射时,所有映射都会再次正常运行。Hibernate似乎在上述映射方面存在问题

我看过很多其他的问题报告,事实上hibernate.org上的论坛上充斥着类似的未解决问题,但我找不到任何线索来解释为什么会出现异常


在我看来,这似乎是一个冬眠虫。有人能证实这一点吗?(注意我使用的是Hibernate 3.6)

可怕的错误。正如我所说,EclipseLink没有问题。在此处查看错误报告(并投赞成票):


如果我们忘记在persistence.xml中声明实体类,可能会遇到这个问题。

请确保注释类中的引用属性名称和setter-getter方法名称应该相同 例如: 我有两个班级的猫和狗有一对一的关系

猫课

class Cat {                                           
private Dog doggy;

    @OneToOne(fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn
    public Dog getdoggy() {
        return this.doggy;
    }
    public void setdoggy(Dog doggy) {
        this.doggy= doggy;
    }
}

in Dog class 

class Dog {

private Cat cat;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "doggy")
    public Cat getCat() {
        return this.cat;
    }
    public void setCat(Cat cat) {
        this.cat= cat;
    }
}

有同样的问题。谢谢
class Cat {                                           
private Dog doggy;

    @OneToOne(fetch = FetchType.LAZY)
    @PrimaryKeyJoinColumn
    public Dog getdoggy() {
        return this.doggy;
    }
    public void setdoggy(Dog doggy) {
        this.doggy= doggy;
    }
}

in Dog class 

class Dog {

private Cat cat;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "doggy")
    public Cat getCat() {
        return this.cat;
    }
    public void setCat(Cat cat) {
        this.cat= cat;
    }
}