【问题标题】:What exactly does mappedby in hibernate mean?休眠中的mappedby到底是什么意思?
【发布时间】:2012-05-31 03:19:45
【问题描述】:

我尝试了文档,但我一无所获。我尝试在 google 和 stackoverflow 上搜索它,但仍然没有任何帮助。我有一个单例类,这个类与另一个类有一对多关系。这是我的代码。

@Entity
public class HomeLibrary extends BaseModelObject {
    @OneToMany(mappedBy = "homeLibrary", cascade = { CascadeType.ALL })
    private Collection<Book> books = new ArrayList<Book>();

    private static HomeLibrary sharedHomeLibrary = new HomeLibrary();

    public static HomeLibrary getSharedHomeLibrary() {
        return sharedHomeLibrary;
    }

    public Collection<Book> getBooks() {
        return books;
    }

    public void setBooks(Collection<Book> books) {
        this.books = books;
    }

    private HomeLibrary() {
    }
}

我在测试中遇到了错误。好像建不了表。

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [HibernateApplicationContext-aop.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: @OneToOne or @ManyToOne on edu.fudan.ss.persistence.hibernate.Book.homeLibrary references an unknown entity: edu.fudan.ss.persistence.hibernate.HomeLibrary

【问题讨论】:

    标签: java hibernate one-to-many


    【解决方案1】:

    Hibernate 需要你的默认构造函数才能创建实体,因为你的构造函数是隐藏的,它不能创建你的HomeEntity

    构造函数应该是公共的或包可见性,hibernate 应该可以使用 setAccessible(true) // 注意我没有尝试过包可见性选项。

    Hibernate 和创建实体的一般框架通过反射使用Class&lt;T&gt;.newInstance()

    mappedBy 表示映射由 Owning 完成,依赖不需要定义映射。

    因此,在您的情况下,如果您在 HomeLibrary 中定义映射,则将 mappedBy 放在 Book 中,反之亦然。

    SO 上的 post 谈到了通过工厂方法创建对象,您可以使用它来创建单例对象。

    【讨论】:

    • 所以没有办法存储单例?
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 2017-08-07
    • 2017-07-20
    • 2014-09-23
    • 2014-07-25
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多