我尝试了文档,但我什么都没有。我尝试在谷歌和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
答案 0 :(得分:0)
Hibernate需要存在默认构造函数才能创建实体,因为隐藏了构造函数,因此无法创建HomeEntity
。
构造函数应该是public或package visibility,hibernate应该能够使用setAccessible(true)//注意我还没有尝试过包可见性选项。
Hibernate以及创建实体的一般框架通过反射使用Class<T>.newInstance()
。
mappedBy意味着映射由Owning方完成,依赖方无需定义映射。
因此,如果您要在Book
中定义映射,反之亦然,那么在您的情况下,您将在HomeLibrary
中放置mappedBy。
关于SO的这个post讲的是通过Factory方法创建对象,你可以使用它来获得你的单例对象。