JPA 2.0 Hibernate @OneToMany + @MapKeyJoinColumn

jnr*_*jnr 6 java hibernate jpa one-to-many

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;
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用.EntityManager正确地保留它,但是当我检索Question时,在它的语句映射中只有一个语言到空的条目.请帮忙


Edit1:奇怪,但是当我预加载所有语言时,如下所示:


String sql = "select l from Language l";
List languages = entityManager.createQuery(sql, Language.class).getResultList();
Run Code Online (Sandbox Code Playgroud)

然后它的作品!
有谁知道如何让hibernate自动加载某些类的所有对象?

小智 1

您使用二级缓存吗?您的对象是否已经是会话的一部分(第一级缓存)?尝试执行会话清除()