java - Hibernate AnnotationException:使用@OneToMany 或@ManyToMany 定位未映射的类
问题描述
我知道这个问题之前已经提出过很多次了,但我仍然对我的错误可能在哪里感到困惑:
AnnotationException:使用@OneToMany 或@ManyToMany 以未映射的类为目标:com.collab.collabplatform.persistance.entities.CategoryModel.category2projectRel[com.collab.collabplatform.persistance.keys.Category2ProjectRelKey]
CREATE TABLE IF NOT EXISTS `category2projectRel`
(
`project_id` bigint(20) NOT NULL,
`category_id` bigint(20) NOT NULL,
PRIMARY KEY (`project_id`, `category_id`),
CONSTRAINT `FK_category2project_project_id` FOREIGN KEY (`project_id`) REFERENCES `project` (`id`),
CONSTRAINT `FK_category2project_category_id` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;
以及实体和关键类:
@Entity
@Table(name = "\"category2projectRel\"")
@NoArgsConstructor
@Getter
@Setter
public class Category2ProjectRelModel {
@EmbeddedId
private Category2ProjectRelKey id;
@ManyToOne
@MapsId("project_id")
@JoinColumn(name = "project_id")
private ProjectModel project;
@ManyToOne
@MapsId("category_id")
@JoinColumn(name = "category_id")
private CategoryModel category;
}
&
@Getter
@Setter
@NoArgsConstructor
@Embeddable
public class Category2ProjectRelKey implements Serializable {
@Column(name = "project_id")
Long projectId;
@Column(name = "category_id")
Long categoryId;
}
&
@Entity
@Table(name = "\"category\"")
@NoArgsConstructor
@Getter
@Setter
public class CategoryModel extends BaseEntity {
@Column
@NotNull
private String title;
@Column
private String color;
@OneToMany(mappedBy = "category")
List<Category2ProjectRelKey> category2projectRel;
}
&
@Entity
@Table(name = "\"project\"")
@NoArgsConstructor
@Getter
@Setter
public class ProjectModel extends BaseEntity {
@ManyToOne
@JoinColumn(name="location_id")
private LocationModel location;
@NotNull
@Column
private String title;
@NotNull
@Column(name = "creation_date")
private OffsetDateTime creationDate;
@NotNull
@Column
private String status;
@Column(name = "termination_date")
private OffsetDateTime terminationDate;
@Column
private String description;
@Column
private Boolean virtual;
@OneToMany(mappedBy = "project")
List<Category2ProjectRelKey> category2projectRel;
@OneToMany(mappedBy = "project")
List<Project2TagRelKey> project2tagRel;
}
解决方案
@ManyToOne @OneToMany @OneToOne @ManyToMany注解应该与实体类一起使用(用@Entity注解的类)
因此,在CategoryModel类中,您将 @OneToMany 与Category2ProjectRelKey类一起使用,它不是实体。
@OneToMany(mappedBy = "category") // this annotation should target an entity class
List<Category2ProjectRelKey> category2projectRel;
一个类上的@Embeddable注解,并不意味着它是一个实体,而是意味着它代表了一组可以包含在其他实体中的更多列。
推荐阅读
- html - Materialize CSS sidenav 在移动设备上不可点击,但可在桌面浏览器上使用
- java - 使用 java 的 MongoDB 聚合
- c++ - Cannot use library generated with cmake although LibConfig.cmake was properly generated
- android - 对不同的风格使用不同的清单文件
- tarantool - tarantool-c 中的 read_reply 太慢了
- python - multiprocessing.Process does not handle `sys.exit` arguments the same as Python
- godot - 传送节点
- java - Not able to connect with a Service
- azure-devops - Azure管道发布部署xml转换问题
- javascript - FlatList 没有正确渲染