【问题标题】:Mapping Java classes using Hibernate: How can I map a list of its own objects inside the class使用 Hibernate 映射 Java 类:如何在类中映射它自己的对象列表
【发布时间】:2012-04-16 10:38:45
【问题描述】:

使用 Hibernate 和 JPA,我想映射一个包含其自身对象列表的类,例如:

public class Category{
     private List<Category> subCategories = new ArrayList<Category>();
}

我正在尝试使用:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "category")

但是当我尝试这个时,我得到以下错误:

Initial SessionFactory creation failed.org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: my.domain.name.Category.category in my.domain.name.Category.subCategories

【问题讨论】:

  • 你想做的叫做“自引用实体”。看看这个答案:stackoverflow.com/a/3393662/870122
  • 是的,这正是我的情况,但我现在收到此错误: Initial SessionFactory creation failed.org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]

标签: java hibernate jakarta-ee jpa


【解决方案1】:

@OneToMany注解的mappedBy属性指的是所有者端关联的属性名。显然,您的 Category 类中没有名为 category 的属性。

【讨论】:

    【解决方案2】:

    试试这个:

    public class Category {
    
        @ManyToOne
        private Category superCategory;
    
        @OneToMany(mappedBy = "superCategory")
        private List<Category> subCategories = new ArrayList<Category>();
    }
    

    您的示例中的问题是您的班级中没有 category 这样的属性。

    【讨论】:

    • 我试过了,现在我得到了这个错误: Initial SessionFactory creation failed.org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]
    • @dave 堆栈跟踪中还有其他异常吗?你当然需要 Category 类上的 @Entity 注释,我假设还有其他属性被映射,你没有包含在原始问题中
    • @dave 检查堆栈跟踪的根本原因异常。我能否建议您接受我对此问题的回答(您的映射问题已解决)并在必要时创建一个新问题以获得有关此新异常的帮助。
    猜你喜欢
    • 2021-10-28
    • 1970-01-01
    • 2017-10-11
    • 2014-11-02
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多