0

IDで場所を取得するだけの関数があります:

public Location getLocationById(Long idSearchedLocation){
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    Location location = null;           
    try{            
        location = (Location) session.load(Location.class, idSearchedLocation);
        //System.out.println(location.getLat() + " " +this.getClass().getName());       

    } catch (HibernateException e) {
        e.printStackTrace();
        session.getTransaction().rollback();
    }catch(Exception e){
        e.printStackTrace();
    }       
    session.getTransaction().commit();      
    return location;
}

別の関数で、場所オブジェクトを取得し、locationフィールドにアクセスしようとします:

Location location = mainManager.getLocationById(idSearchedLocation);
System.out.println(location.getLat() + " " +this.getClass().getName());

そして、返された場所を受け取った後、印刷しようとすると例外が発生しますlocation.getLat()

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

Location オブジェクトにはコレクションも関連付けられたエンティティも含まれていないため、このエラーが発生するのは奇妙StringですFloat

dao 関数で出力する行のコメントを外すとlocation.getLat()、すべてが期待どおりに機能し、すべてがロードされます (例外はなく、出力は成功します)。しかし、最初のケースで Hibernate がオブジェクトのフィールドをロードしないのはなぜですか?

アップデート

@Entity
@Table(name="location")
public class Location {
    private Long id;
    private String name;
    private String country;
    private String address;
    private Float lat;
    private Float lng;
    //getters and setters
}
4

1 に答える 1