2014-10-25 4 views
2

Я делаю приложение в Java EE (Jersey) с JPA, где у меня проблема с неинициализированными объектами. У меня есть 3 объекта. Автомобиль, владелец, дом, где автомобиль может иметь несколько владельцев и владельцев, может иметь несколько домов. Когда я вернусь (entityManager.find) автомобиль, владелец будет инициализирован. Когда я вернусь домой, владелец будет инициализирован, но нет. Я хотел бы иметь возможность называть что-то вроде House.getOwner(). GetCar(). GetId(). Теперь я должен позвонить в Дом, а затем позвонить на Владельца, чтобы получить Автомобиль. Как это разрешить?Java JPA FetchType.EAGER не работает

@Entity 
@Table(name = "House") 
public class HouseEntity { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "owner_id", nullable = false) 
    private OwnerEntity owner; 
} 

@Entity 
@Table(name = "Owner") 
public class OwnerEntity { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "car_id") 
    private CarEntity car; 

    @OneToMany(mappedBy = "owner") 
    @JoinColumn(name = "house", nullable = false) 
    private Set<HouseEntity> house; 

} 

@Entity 
@Table(name = "Car") 
public class CarEntity { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private long id; 

    @OneToMany(mappedBy = "owner") 
    private Set<OwnerEntity> owner; 
} 

Редактировать 1: Извините, в картографии произошла ошибка, классы хорошо работают. Но проблема с инициализацией остается.

+0

попробуйте использовать Hibernate.initialize() –

+0

Что-то не так здесь: OwnerEntity отображает себя с помощью Set владелец? Разве это не домов? – nomoa

+0

Да, я совершил ошибку там. Я эти объекты большие, поэтому я отредактировал их, чтобы они были короче, но ошибка произошла. – user1816532

ответ

0

Попробуйте это:

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 

@Entity 
@Table(name = "House") 
public class HouseEntity { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @ManyToOne 
    @JoinColumn(name = "owner_id", nullable = false) 
    private OwnerEntity owner; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public OwnerEntity getOwner() { 
     return owner; 
    } 

    public void setOwner(OwnerEntity owner) { 
     this.owner = owner; 
    } 

} 





import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

@Entity 
@Table(name = "Owner") 
public class OwnerEntity { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @ManyToOne 
    @JoinColumn(name = "car_id") 
    private CarEntity car; 

    @OneToMany(mappedBy = "owner", fetch = FetchType.EAGER) 
    private Set<HouseEntity> houses; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public CarEntity getCar() { 
     return car; 
    } 

    public void setCar(CarEntity car) { 
     this.car = car; 
    } 

    public Set<HouseEntity> getHouses() { 
     return houses; 
    } 

    public void setHouses(Set<HouseEntity> houses) { 
     this.houses = houses; 
    } 

} 



import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

@Entity 
@Table(name = "Car") 
public class CarEntity { 

    @Id 
    @Column(name = "id") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 

    @OneToMany(mappedBy = "car", fetch = FetchType.EAGER) 
    private Set<OwnerEntity> owner; 

    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public Set<OwnerEntity> getOwner() { 
     return owner; 
    } 

    public void setOwner(Set<OwnerEntity> owner) { 
     this.owner = owner; 
    } 

    public void addOwner(OwnerEntity owner){ 
     this.owner.add(owner); 
    } 

} 

Когда вы запрашиваете для автомобилей графа объектов всего будет заполняться.

Смежные вопросы