OnetoOne 未知映射者

Posted

技术标签:

【中文标题】OnetoOne 未知映射者【英文标题】:OnetoOne unknown mappedBy 【发布时间】:2017-10-20 08:05:47 【问题描述】:

我在以下两个实体的关系之间遇到了 mappedBy 未知错误。

这是一对一的关系,关系的所有者应该是 Story 实体。我在这段代码中看不到我的错误。

两个实体都有 getter 和 setter。

这是第一个实体:

@Entity
@Table(name = "story")
public class Story 

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String name;

    private String link;

    @OneToOne(mappedBy = "story", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private DesignTechnique designTechnique;


    public Story()

    

    public Story(String name, String link)
        this.name = name;
        this.link= link;
    

    public Integer getId() 
        return id;
    

    public void setId(Integer id) 
        this.id = id;
    

    public String getName() 
        return name;
    

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

    public String getLink() 
        return link;
    

    public void setLink(String link) 
        this.link= link;
    

    public DesignTechnique getDesignTechnique() 
        return designTechnique;
    

    public void setDesignTechnique(DesignTechnique designTechnique) 
        this.designTechnique = designTechnique;
    

    @Override
    public String toString() 
        return "UserStory" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", link='" + link+ '\'' +
                ", designTechnique='" + designTechnique + '\'' +
                '';
    

这是第二个实体:

   @Entity
@Table(name = "designTechnique")
public class DesignTechnique 

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    private String technique;

    @OneToOne
    @JoinColumn(name = "story_ID")
    private Story story;


    public DesignTechnique()

    

    public DesignTechnique(String technique)
        this.technique = technique;
    

    public Integer getId() 
        return id;
    

    public void setId(Integer id) 
        this.id = id;
    

    public String getTechnique() 
        return technique;
    

    public void setTechnique(String technique) 
        this.technique = technique;
    

    public Story getStory() 
        return story;
    

    public void setStory(Story story) 
        this.story = story;
    

    @Override
    public String toString() 
        return "TestdesignTechnique" +
                "id=" + id +
                ", technique='" + technique + '\'' +
                ", story='" + story+ '\'' +
                '';
    

编辑

堆栈跟踪:

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: Unknown mappedBy in: com.clusters.Model.Story.designTechnique, referenced property unknown: com.clusters.Model.DesignTechnique.story

编辑 2

我尝试在设计实体中添加@PrimaryKeyJoinColumn 而不是@JoinColumn,得到同样的错误。

我已经在两个实体中生成了 getter 和 setter。所以这些东西没有错别字。

【问题讨论】:

你能发布完整的 Stacktrace 吗? @mrkernelpanic 添加了错误 尝试离开mappedBy = "story",,或者更好地阅读javaDoc到mappedBy @HerrDerb 如果我理解正确,需要使用 mappedBy 来判断哪个是双向关系中的所有者 好吧,再试一次 :) 在你的 DesginTechnique 中使用 @PrimaryKeyJoinColumn 而不是 @JoinColumn(name ="story_ID") hibernate-one-to-one-relationship 【参考方案1】:

这可能是一个休眠错误!看到这个:

https://hibernate.atlassian.net/browse/HHH-5695

尝试更改您使用的休眠版本。

【讨论】:

以上是关于OnetoOne 未知映射者的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate @OneToOne 单向映射...级联删除

如何使用 findBy($creteria) 进行双向 OneToOne 映射?

如何处理 JPA @OneToOne 映射中的“孤立”行

学说 oneToOne 单向:获取映射对象

OneToOne 双向关系的错误映射原则

休眠 @OneToOne 与 Principal REST 的映射