Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA 2.0 Hibernate@OneToMany+@MapKeyJoinColumn_Java_Hibernate_Jpa_One To Many - Fatal编程技术网

Java JPA 2.0 Hibernate@OneToMany+@MapKeyJoinColumn

Java JPA 2.0 Hibernate@OneToMany+@MapKeyJoinColumn,java,hibernate,jpa,one-to-many,Java,Hibernate,Jpa,One To Many,OneToMany+MapKeyJoin列不适合我,请说明我做错了什么 我正在使用JPA2.0+Hibernate3.6.1 并希望映射以下表: 上课: 那就行了 有人知道如何让hibernate自动加载特定类的所有对象吗?您使用的是二级缓存吗? 您的对象是否已经是会话的一部分(一级缓存)?尝试执行会话清除()尝试调用statements.size()以确保获取数据,或者您可以尝试将关系的获取类型定义为EAGER:@OneToMany(mappedBy=“question”,cascad

OneToMany+MapKeyJoin列不适合我,请说明我做错了什么

我正在使用JPA2.0+Hibernate3.6.1 并希望映射以下表:



上课:


那就行了

有人知道如何让hibernate自动加载特定类的所有对象吗?

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

尝试调用statements.size()以确保获取数据,或者您可以尝试将关系的获取类型定义为EAGER:@OneToMany(mappedBy=“question”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)


您可能需要阅读以下内容:

事实上,class语句中的id属性必须是复合主键。在表语句中不需要语句id。主键由语言id和问题id组成

试试看:

    @Entity
    public class Statement implements Serializable {

        private static final long serialVersionUID = 1L;

        @EmbeddedId
        private StatementId id = new StatementId();

        @Column(name = "message")
        private String message;
    }

    @Embeddable
    private static class StatementId implements Serializable {

        private static final long serialVersionUID = 1L;

        StatementId(){}

        @ManyToOne
        private Question product;

        @ManyToOne
        private Language language;

    }
并且不要忘记正在讨论的fetchType,以避免 懒散的初始化例外

public class Question {

    @OneToMany(mappedBy="id.question", fetch=FetchType.EAGER)
    @MapKeyJoinColumn(name="language_id")
    private Map<Language, Statement> statements = new HashMap<Language, Statement>();
}
公开课问题{
@OneToMany(mappedBy=“id.question”,fetch=FetchType.EAGER)
@MapKeyJoinColumn(name=“language\u id”)
私有映射语句=new HashMap();
}

希望这会有帮助

类似的设置对我来说很好。你能展示你的测试代码吗?你使用Hibernate 3.6.1还是其他什么?我用以下方式测试它:手动向数据库插入一些数据,然后调用junit测试,比如
entityManager.find(Question.class,463L)否,我不使用二级缓存,当会话中没有任何内容(刚刚启动)时,当会话中没有语言实例时,就会出现问题。
    @Entity
    public class Statement implements Serializable {

        private static final long serialVersionUID = 1L;

        @EmbeddedId
        private StatementId id = new StatementId();

        @Column(name = "message")
        private String message;
    }

    @Embeddable
    private static class StatementId implements Serializable {

        private static final long serialVersionUID = 1L;

        StatementId(){}

        @ManyToOne
        private Question product;

        @ManyToOne
        private Language language;

    }
public class Question {

    @OneToMany(mappedBy="id.question", fetch=FetchType.EAGER)
    @MapKeyJoinColumn(name="language_id")
    private Map<Language, Statement> statements = new HashMap<Language, Statement>();
}