org.hibernate.MappingException - 这个异常是什么意思?

时间:2015-08-24 08:51:51

标签: java hibernate

我收到以下错误:

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注释添加到该注释中,并且没有我没有错误。

这看起来是否正确?

1 个答案:

答案 0 :(得分:0)

默认情况下,所有字段(或属性)都在JPA中映射。这就是为什么你必须告诉JPA提供商Set应该映射的内容(一对多,多对多,@ElementCollection等),或者映射它以@Transient告诉提供商您不希望保留该属性。