java - JPA:Map<Entity1,Set<Entity2>> 可能吗?

标签 java jpa

我在任何地方都没有看到示例,所以我不确定这是否可行。但基本上,我想看看我是否可以将实体中的字段绑定(bind)到

   Map<Skill,Set<Rating>> ratings;


CREATE TABLE Worker (
  ID         BIGINT PRIMARY KEY,

);

CREATE TABLE Skill (
  ID   BIGINT PRIMARY KEY,
  name VARCHAR(32) NOT NULL,
  UNIQUE (name)
);

CREATE TABLE WorkerSkillRating (
  ID       BIGINT PRIMARY KEY,
  WorkerID BIGINT NOT NULL,
  SkillID  BIGINT NOT NULL,
  Rating   INT,
  FOREIGN KEY (WorkerID) REFERENCES Worker (ID),
  FOREIGN KEY (SkillID) REFERENCES Skill (ID),
  FOREIGN KEY (Rating) REFERENCES Rating (ID)
);

CREATE TABLE Rating (
  ID       BIGINT PRIMARY KEY,
  score    TINYINT NOT NULL,
  comments VARCHAR(256)
);

实体

@Entity
public class Skill {

    @Id
    private Long id;

    private String name;


    public Skill(String name) {
        this();
        this.name = name;
    }

    public Skill() {
        this.id = Math.abs( new Random().nextLong());
    }

}


@Entity
public class Worker {

    @Id
    private Long id;

    // The open question
    public Map<Skill, Set<Rating>> ratings;

}

@Entity
public class Rating {

    @Id
    private Long id;
    private Byte score;
    private String comments;

}

最佳答案

根据 JSR-0038 JPA 规范。使用 Map 时,只允许以下组合:基本类型、实体和可嵌入对象。

Map<Basic,Basic> 
Map<Basic, Embeddable> 
Map<Basic, Entity>

Map<Embeddable, Basic> 
Map<Embeddable,Embeddable>
Map<Embeddable,Entity> 

Map<Entity, Basic>
Map<Entity,Embeddable>
Map<Entity, Entity> 

我认为以您想要的方式进行可能的映射并没有什么大不了的,但这超出了规范并且大多数提供商都遵循它们,我认为映射根本不是很常见。

"worker has many skills and he may have been given many ratings on a single skill. "

然后添加到技能类a Set<Ratings> , 而不是直接嵌套在 map 中作为它的值。

关于java - JPA:Map<Entity1,Set<Entity2>> 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36440845/

相关文章:

java - 功能接口(interface)实现和用例

java - JPA/Hibernate Persist 级联,即使它不应该

java - JPQL 通过 count(*) 进行分组

java - 验证场景的事务性 Spring Junit4 测试用例

java - 如何学习高级 Java Web 开发概念

java - 添加第二列与第一列中的重复元素

java - 处理日期选择器中日期格式的解析异常

java - Ruby 无符号右移

java - 审计实体 JPA 中的更改

java - jax-ws 服务返回数组列表