Java JPA 2.0 Hibernate@OneToMany+@MapKeyJoinColumn
OneToMany+MapKeyJoin列不适合我,请说明我做错了什么 我正在使用JPA2.0+Hibernate3.6.1 并希望映射以下表: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
上课:
那就行了
有人知道如何让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>();
}