我收到以下错误:
Could not determine type for: java.util.Set, at table: Ruleset, for columns: [org.hibernate.mapping.Column(ruleset)]
class snippet:
@Entity
public class Ruleset implements java.io.Serializable {
@Id
@OneToOne(targetEntity = RulesetStatus.class)
private Integer id;
private Set<Rule> ruleset = new HashSet<Rule>(0);
public Ruleset() {
}
public Ruleset(Integer ID, Set<Rule> ruleset) {
this.id = ID;
this.ruleset = ruleset;
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Set<Rule> getRuleSet(){
return this.ruleset;
}
public void setRuleset(Set<Rule> ruleset) {
this.ruleset = ruleset;
}
}
我已经发现将注释规则集注释为Transient会使问题消失,但之后规则集将不会持久存储到数据库中。我怎么告诉hibernate这个字段的类型?
我对Hibernate很新,所以我完全迷失在这里。 __________________________编辑__________________________ 实际的关系应该是@ManyToMany,因为规则可以在许多规则集中,规则集可以有很多规则。
我将@ManyToMany注释添加到集合中,然后在要映射到的规则类中没有相应的集合。我在规则类中添加了该集合,将@ManyToMany注释添加到该注释中,并且没有我没有错误。
这看起来是否正确?
答案 0 :(得分:0)
默认情况下,所有字段(或属性)都在JPA中映射。这就是为什么你必须告诉JPA提供商Set
应该映射的内容(一对多,多对多,@ElementCollection
等),或者映射它以@Transient
告诉提供商您不希望保留该属性。