我的OneToMany + MapKeyJoinColumn不起作用,请建议我做错了什么。
我正在使用JPA 2.0 + Hibernate 3.6.1,并希望映射以下表:
到类:
@Entity
public class Question {
// id and other fields
@OneToMany(mappedBy="question", cascade = CascadeType.ALL)
@MapKeyJoinColumn(name="language_id")
private Map<Language, Statement> statements =
new HashMap<Language, Statement>();
}
@Entity
public class Statement {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "language_id", nullable = true)
private Language language;
@ManyToOne
@JoinColumn(name = "question_id", nullable = false)
private Question question;
@Column(name = "message")
private String message;
}
@Entity
public class Language {
@Id
private Long id;
@Column(name = "name")
private String name;
}
但是它不起作用。EntityManager 正确地持久化了它,但是当我检索 Question 时,在它的语句映射中只有一个语言到 null 的条目。请帮忙。
Edit1: 奇怪的是,当我预加载所有语言,像这样:
String sql = "select l from Language l";
List languages = entityManager.createQuery(sql, Language.class).getResultList();
然后它就可以工作了!
有人知道如何让Hibernate自动加载某个类的所有对象吗?