java - 如何为具有 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; }
}
解决方案
这实际上与 Spring 无关。这是 Hibernate 抛出的错误,因为 JPA 规范要求每个实体都有一个标识。至于您的情况,我不建议创建一个单独的实体,因为据我了解您的列名,它只是角色和功能表之间关系的映射。我建议 JPA 多对多关系。看看@ManyToMany
和@JoinTable
注释。
这对我来说也是一个非常好的教程
推荐阅读
- java - IntelliJ IDEA:创建没有插件的类型安全构建器的简单方法?
- anychart - 如何将anycharts股票滚动条设置为不移动大小
- mongodb - 未知顶级运算符 $exists
- java - 无法使用 java 中的 spark-redshift 库连接到 S3
- android - 获取联系人忽略口音
- java - Spring 上 Bcrypt 实现的可能错误
- javascript - 如何检查状态以响应 HTTP 调用
- c# - 如何正确加载预制件
- angular - Angular:使用 HttpClient.request() 将数据上传到 Springboot App 时,访问被 CORS 策略阻止
- cluster-analysis - 根据文档的文本创建文档聚类