当前位置: 首页 > 知识库问答 >
问题:

针对EmbeddedID中未映射的类错误使用@OneTomany或@ManyTomany

卢黎昕
2023-03-14

我将spring boot with JPA用于一个简单的CRUD应用程序。
我有一个对象(ObjectD)带有一个嵌入的ID(PrimaryKey),它有一个通过一对多关系引用两个基本对象(ObjectA和ObjectB)的ID的复合主键。
但是,我得到一个错误,它说

org.hibernate.AnnotationException:针对未映射的类使用@OneTomany或@ManyTomany:Objecta.PrimaryKeys[PrimaryKey]。

这似乎是一个相当普遍的问题,但我尝试了所有回复中的所有建议,似乎无法突破。如能提供援助,将不胜感激。

我通读了所有类似的问题,尝试了所有的建议,包括:

>

  • 确保注释是javax.persistence.entity,而不是org.hibernate.annotations.entity

    将OneToMany侧的mappedBy字段分别更改为PrimaryKey.ObjectA或PrimaryKey.ObjectB

    我使用的是Spring boot,所以我没有hibernate.cfg或持久性配置文件。我依靠spring boot jpa来做必要的工作。

    我可以启动ApplicationContext的唯一方法是分别删除ObjectA和B上的OneToMany字段。但是我没有对ObjectA和ObjectB中的PrimaryKey的引用。我知道这个问题与一个国家的关系有关,但我不知道如何解决它。

    @Entity
    public class ObjectA {
        @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(nullable = false) private Long objectAId;
    
        @OneToMany(mappedBy = "objecta", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
        private Set<PrimaryKey> primarykeys = new HashSet<PrimaryKey>();
    
        @Column(nullable = false, unique = true, length = 200) private String name;
    
    //constructor, getters, setters, equals and hashcode left out for brevity
    }   
    
    @Entity
    public class ObjectB {
        @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(nullable = false) private Long objectBId;
        @Column(nullable = false, unique = true, length = 200) private String name;
        @OneToMany(mappedBy = "objectb", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER) 
        private Set<PrimaryKey> primaryKeys = new HashSet<PrimaryKey>();
    
    //constructor, getters, setters, equals and hashcode left out for brevity   
    }
    
    @Embeddable
    public class PrimaryKey implements Serializable {
        private static final long serialVersionUID = 1L;
    
        @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)  
        @JoinColumn(name="objectAId") 
        private ObjectA objectA;
        @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
        @JoinColumn(name="objectBId") 
        private ObjectB objectB;
    
    //constructor, getters, setters, equals and hashcode left out for brevity
    }
    
    @Entity
    public class ObjectD {
        @EmbeddedId private PrimaryKey primaryKey;
        @Column(nullable = false, unique = true, length = 200) private String name;
    
    //constructor, getters, setters, equals and hashcode left out for brevity
    }
    
  • 共有1个答案

    汤嘉平
    2023-03-14

    @OneTomany不能应用于@Embeddable,只能应用于@Entity

    换句话说,你不能这样写:

    @OneToMany(mappedBy = "objecta", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
    private Set<PrimaryKey> primarykeys = new HashSet<PrimaryKey>();
    

    如果它是可嵌入的-嵌入它!

     类似资料:
    • 问题内容: 我有一个带有复合键的实体,因此我使用@Embeddable和@EmbeddedId批注。可嵌入类如下所示: 以及使用它的实体: 现在,我想将该实体映射到另一个这样的实体中: 注意 的mappedBy =“id.admin” 是指 管理 字段中 DitaAdminAccountSkillPK 使用 ID 的字段 DitaAdminAccountSkill 。 这样可以编译运行。但是,在e

    • 问题内容: 我正在使用“hibernate注释”找到我的脚,并且遇到了一个问题,希望有人可以提供帮助。 我有2个实体,分别是Section和ScopeTopic。该部分具有List类成员,因此具有一对多关系。运行单元测试时,出现此异常: 使用@OneToMany或@ManyToMany定位未映射的类:com.xxx.domain.Section.scopeTopic [com.xxx.domain

    • 我有一个产品数据库。我已经创建了一个简单的Hibernate项目来从数据库中检索所有的产品。但是,我在编译代码时出现了以下异常: 令人惊讶的是,将prodcuts添加到数据库中可以正常工作。

    • 我一直试图通过一个名为Guardian的中间类映射两个用户之间的一些“OneToOne”关系。当我试图检索一个用户(和他的监护人)时,从Glassfish(Open edition V4.0)返回一个内部服务器错误。但是,日志中没有显示任何类型的堆栈跟踪或任何错误。我怀疑问题是我在JPA类中的映射。 启动服务器时,我得到两个与Guardian类有关的警告,但我并不真正理解: 警告:映射到元素[me

    • toString()]hibernate:/*插入com.pissolato.api.entitys.sale*/插入到sale(company,created,description,discount,sub_value,type,updated,user,value)值(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)

    • 我对容器映射有问题。我需要在key中存储我自己的类Person,但我有错误C2784(即,“编译器无法从提供的函数参数中确定模板参数”)。这是《Ivor Horton的开始:Visual C 2010》一书中的一个例子 错误1错误C2784:“布尔标准::运算符 错误 2 错误 C2784: 'bool std::运算符 错误 3 错误 C2784: '布尔 std::运算符 错误4错误C2784