首页 > 解决方案 > 如何为具有 n:m 关系和多个主键的 MySQL 数据库表配置实体类

问题描述

当我运行 Spring Boot 项目时,出现以下错误“调用 init 方法失败;嵌套异常是 org.hibernate.AnnotationException:没有为实体指定标识符:”

我还有其他一些具有多个主键和外键的类,但它们没有出错。

import javax.persistence.*;

@Entity
@Table(name="roles_has_features")
public class RoleFeatures {


    @Column(name = "role_id_fk")
    private Long roleIdFk;


    @Column(name = "feature_id_fk")
    private Long featureIdFk;



    public Long getRoleIdFk() { return roleIdFk; }

    public void setRoleIdFk(Long roleIdFk) { this.roleIdFk = roleIdFk; }

    public Long getFeatureIdFk() { return featureIdFk; }

    public void setFeatureIdFk(Long featureIdFk) { this.featureIdFk = featureIdFk; }


}

标签: javamysqlspring-boot

解决方案


这实际上与 Spring 无关。这是 Hibernate 抛出的错误,因为 JPA 规范要求每个实体都有一个标识。至于您的情况,我不建议创建一个单独的实体,因为据我了解您的列名,它只是角色和功能表之间关系的映射。我建议 JPA 多对多关系。看看@ManyToMany@JoinTable注释。

这对我来说也是一个非常好的教程

Hibernate – 多对多示例


推荐阅读