我在任何地方都没有看到示例,所以我不确定这是否可行。但基本上,我想看看我是否可以将实体中的字段绑定(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/