JPA或Hibernate中的枚举是否可能存在多对多关系?
我的问题基本上是标题,下面的文字描述了我的努力,使其工作。那么,我试图实现的是可能的还是应该创建一个JPA或Hibernate中的枚举是否可能存在多对多关系?,hibernate,jpa,enums,many-to-many,Hibernate,Jpa,Enums,Many To Many,我的问题基本上是标题,下面的文字描述了我的努力,使其工作。那么,我试图实现的是可能的还是应该创建一个类别类,并在枚举和实体之间进行转换 文章与类别有多对多关系,但类别是一个枚举,会造成麻烦。JPA很好地创建了表,但当我查询某个类别时,会引发以下异常: JpaSystemException:实体:类别没有默认构造函数 我有一个构造函数,但枚举的构造函数只能是私有的,JPA规范规定实体的默认构造函数应该是公共的或受保护的 类别枚举: @Entity public enum Category {
类别
类,并在枚举和实体之间进行转换
文章
与类别
有多对多关系,但类别
是一个枚举,会造成麻烦。JPA很好地创建了表,但当我查询某个类别时,会引发以下异常:
JpaSystemException:实体:类别没有默认构造函数
我有一个构造函数,但枚举的构造函数只能是私有的,JPA规范规定实体的默认构造函数应该是公共的或受保护的
类别枚举:
@Entity
public enum Category {
HOME_NEWS("home news"),
FOREIGN_NEWS("foreign news"),
POLITICS("politics"),
BUSINESS("business"),
BREAKING("breaking"), // and updates
SCIENCE("science"),
OPINION("opinion"),
SPORTS("sports"),
ENVIRONMENT("environment"),
TECHNOLOGY("technology"),
TRAVEL("travel"),
FASHION("fashion"),
LIFESTYLE("lifestyle"),
HEALTH("health"),
ARTS("arts"),
FOOD("food"),
CULTURE("culture"),
GLAMOUR("glamour"),
PHOTOGRAPHY("photography"),
NOT_DEFINED("not defined");
@Id
@GeneratedValue
private long id;
@Column(unique = true)
private String name;
Category() {
}
Category(String name) {
this.name = name;
}
private static Map<String, Category> nameToValueMap = new HashMap<>();
static {
for (Category category : EnumSet.allOf(Category.class)) {
nameToValueMap.put(category.name(), category);
}
}
public static Category forName(String name) {
return nameToValueMap.get(name);
}
public String toString() {
return this.name;
}
}
@实体
公共枚举类别{
家庭新闻(“家庭新闻”),
外国新闻(“外国新闻”),
政治(“政治”),
业务(“业务”),
中断(“中断”)、//和更新
科学(“科学”),
意见(“意见”),
体育运动(“体育”),
环境(“环境”),
技术(“技术”),
旅行(“旅行”),
时尚(“时尚”),
生活方式(“生活方式”),
健康(“健康”),
艺术(“艺术”),
食物(“食物”),
文化(“文化”),
魅力(“魅力”),
摄影术(“摄影术”),
未定义(“未定义”);
@身份证
@生成值
私人长id;
@列(唯一=真)
私有字符串名称;
类别(){
}
类别(字符串名称){
this.name=名称;
}
私有静态映射nameToValueMap=newhashmap();
静止的{
for(类别:EnumSet.allOf(类别.class)){
nameToValueMap.put(category.name(),category);
}
}
公共静态类别forName(字符串名称){
返回nameToValueMap.get(name);
}
公共字符串toString(){
返回此.name;
}
}
和部分文章类:
@Entity
public class Article implements Comparable<Article> {
@ElementCollection
@JoinTable(name = "article_category",
joinColumns = {@JoinColumn(name = "article_id")},
inverseJoinColumns = {@JoinColumn(name = "category_id")})
private Set<Category> categories = new HashSet<>(0);
}
@实体
公共类文章实现了可比性{
@元素集合
@JoinTable(name=“article\u category”,
joinColumns={@JoinColumn(name=“article_id”)},
inverseJoinColumns={@JoinColumn(name=“category_id”)})
私有集类别=新哈希集(0);
}