2015-08-24 4 views
1

Я получаю следующее сообщение об ошибке:org.hibernate.MappingException - Что означает это исключение?

Could not determine type for: java.util.Set, at table: Ruleset, for columns: [org.hibernate.mapping.Column(ruleset)] 

класс фрагмент кода:

@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, поэтому я полностью потерялся здесь. __________________________Edit __________________________ Фактическое отношение должно было быть @ManyToMany, как правило, может быть во многих наборах правил, а набор правил может иметь много правил.

Я добавил аннотацию @ManyToMany к набору, а затем не имел соответствующего набора в классе правил для сопоставления. Я добавил набор в класс правил, добавив к нему аннотацию @ManyToMany, и нет никаких ошибок.

Правильно ли это?

+0

Вы пропускаете аннотацию @ManyToOne на наборе правил? – Jens

+0

Meaby здесь у вас есть ответ https://docs.jboss.org/hibernate/orm/3.6/reference/es-ES/html/collections.html или https://docs.oracle.com/cd/E19798-01 /821-1841/giqvn/index.html – aSoler

+0

Вы также должны опубликовать соответствующие части вашей схемы db. –

ответ

0

По умолчанию все поля (или свойства) отображаются в JPA. Вот почему вы должны рассказать поставщику JPA, что ваш Set должен отображать (один-ко-многим, многие-ко-многим, @ElementCollection и т. Д.) Или сопоставить его как @Transient, чтобы сообщить провайдеру, что вы не хотите свойство, которое необходимо сохранить.

Смежные вопросы