Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA或Hibernate中的枚举是否可能存在多对多关系?_Hibernate_Jpa_Enums_Many To Many - Fatal编程技术网

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);
}