0

我尝试了文档,但我什么也没有。我尝试在 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
4

1 回答 1

0

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

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

Class<T>.newInstance()Hibernate 和一般框架通过反射创建实体使用。

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

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

SO上的这篇文章谈到了通过工厂方法创建对象,您可以使用它来拥有您的单例对象。

于 2012-05-31T03:23:50.393 回答