Java 在hibernate中加载相关对象
我想加载具有多对一字段类型的House对象:Java 在hibernate中加载相关对象,java,mysql,hibernate,proxy,many-to-one,Java,Mysql,Hibernate,Proxy,Many To One,我想加载具有多对一字段类型的House对象: @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="type_id") public Type getType() { return type; } 我现在想这样访问它: House temp = DataBaseConnector.getInstance().findHouseByID(id); Type type = temp.getType(); findHouseById()方法
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="type_id")
public Type getType() {
return type;
}
我现在想这样访问它:
House temp = DataBaseConnector.getInstance().findHouseByID(id);
Type type = temp.getType();
findHouseById()
方法如下所示:
public static House findHouseByID(Integer id) {
Session session = getSessionFactory().openSession();
House e = (House) session.load(House.class, id);
session.close();
return e;
}
但我犯了一个错误:
线程“AWT-EventQueue-0”中出现异常
org.hibernate.LazyInitializationException:无法初始化代理
-org.hibernate.proxy.AbstractLazyInitializer.initialize上没有会话(AbstractLazyInitializer.java:165)
在
org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:286)
在
org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185)
在mapping.House\u$$\ ujvst2a0\u3.getType(House\u$\ ujvst2a0\u3.java)
类型实体:
package mapping;
import java.util.List;
import javax.persistence.*;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity
@Table(name="Type")
public class Type {
private int type_id;
private String name;
private List <Account> accounts;
private List <House> houses;
public Type(String name)
{
this.name = name;
}
public Type()
{
}
@Id
@GeneratedValue
@Column(name="id")
public int getType_id() {
return type_id;
}
public void setType_id(int type_id) {
this.type_id = type_id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Fetch(FetchMode.JOIN)
@OneToMany(mappedBy="type")
public List <Account> getAccounts() {
return accounts;
}
public void setAccounts(List <Account> accounts) {
this.accounts = accounts;
}
@Fetch(FetchMode.JOIN)
@OneToMany(mappedBy="type")
public List <House> getHouses() {
return houses;
}
public void setHouses(List <House> houses) {
this.houses = houses;
}
}
包映射;
导入java.util.List;
导入javax.persistence.*;
导入org.hibernate.annotations.Fetch;
导入org.hibernate.annotations.FetchMode;
@实体
@表(name=“Type”)
公共类类型{
私有int类型_id;
私有字符串名称;
私人名单账户;
私人上市公司;
公共类型(字符串名称)
{
this.name=名称;
}
公共类型()
{
}
@身份证
@生成值
@列(name=“id”)
public int getType_id(){
返回类型\u id;
}
公共void setType_id(int type_id){
this.type\u id=type\u id;
}
@列(name=“name”)
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@Fetch(FetchMode.JOIN)
@OneToMany(mappedBy=“type”)
公共帐户列表(){
归还账户;
}
公共帐户(列出帐户){
这个账户=账户;
}
@Fetch(FetchMode.JOIN)
@OneToMany(mappedBy=“type”)
公众名单{
归还房屋;
}
公共房屋(列表房屋){
这个房子=房子;
}
}
和房子
package mapping;
import java.util.*;
import javax.persistence.*;
@Entity
@Table(name="House")
public class House {
private int id;
private String name;
private int sq_metrage;
private String address;
private float price;
private String description;
private Account owner;
private State state;
private Type type;
private List<Reservation> reservations;
private List<Opinion> opinions;
public House(){
}
public House(String name, int sq_metrage, String address, float price, String description)
{
this.name = name;
this.sq_metrage = sq_metrage;
this.address = address;
this.price = price;
this.description = description;
}
@Id
@GeneratedValue
@Column(name="id")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="sq_metrage")
public int getSq_metrage() {
return sq_metrage;
}
public void setSq_metrage(int sq_metrage) {
this.sq_metrage = sq_metrage;
}
@Column(name="address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Column(name="price")
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
@Column(name="description")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToOne (fetch=FetchType.EAGER)
@JoinColumn(name="owner_id")
public Account getOwner() {
return owner;
}
public void setOwner(Account owner) {
this.owner = owner;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="state_id")
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="type_id")
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
@OneToMany(mappedBy="house")
public List<Reservation> getReservations() {
return reservations;
}
public void setReservations(List<Reservation> reservations) {
this.reservations = reservations;
}
@OneToMany(mappedBy="house")
public List<Opinion> getOpinions() {
return opinions;
}
public void setOpinions(List<Opinion> opinions) {
this.opinions = opinions;
}
}
包映射;
导入java.util.*;
导入javax.persistence.*;
@实体
@表(name=“House”)
公屋{
私有int-id;
私有字符串名称;
私人国际平方米;
私有字符串地址;
私人浮动价格;
私有字符串描述;
私人帐户所有者;
私营国家;
私有类型;
私人名单预订;
私人名单意见;
酒店(){
}
酒店(字符串名称、整数平方米、字符串地址、浮动价格、字符串描述)
{
this.name=名称;
这个.sq_米=sq_米;
this.address=地址;
这个价格=价格;
this.description=描述;
}
@身份证
@生成值
@列(name=“id”)
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
@列(name=“name”)
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
@列(名称=“平方米”)
公共int getSq_metrage(){
返回平方米;
}
公共空间设置平方米(整数平方米){
这个.sq_米=sq_米;
}
@列(name=“address”)
公共字符串getAddress(){
回信地址;
}
公共无效设置地址(字符串地址){
this.address=地址;
}
@列(name=“price”)
公开发行价格(){
退货价格;
}
公共定价(浮动价格){
这个价格=价格;
}
@列(name=“description”)
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
@manytone(fetch=FetchType.EAGER)
@JoinColumn(name=“owner\u id”)
公共帐户getOwner(){
归还所有人;
}
公共无效集合所有者(帐户所有者){
this.owner=所有者;
}
@manytone(fetch=FetchType.EAGER)
@JoinColumn(name=“state\u id”)
公共状态getState(){
返回状态;
}
公共无效设置状态(状态){
this.state=状态;
}
@manytone(fetch=FetchType.EAGER)
@JoinColumn(name=“type\u id”)
公共类型getType(){
返回类型;
}
公共void集合类型(类型){
this.type=type;
}
@OneToMany(mappedBy=“house”)
公共列表{
返回预订;
}
公共预订(列出预订){
这个。保留=保留;
}
@OneToMany(mappedBy=“house”)
公众意见{
反馈意见;
}
公众意见(列出意见){
这个观点=观点;
}
}
任何帮助都将不胜感激:)这是一个不清楚的问题,但我有两个猜测
我猜您的房屋实体包含类型实体,因此您可以在您的类型类上添加
@Fetch(FetchMode.JOIN)
。(在某些情况下,它会复制值,因此您必须区分您的结果)您可以向我们展示您的完整实体类吗?