не удалось лениво инициализировать набор ролей: com.pojo.Student.phonenos, ни один сеанс или сеанс не был закрыт

Я изучаю отображение гибернации с помощью аннотации. Я закончил один раздел. Т.е. Я могу автоматически вставлять дочерний класс при сохранении родительской таблицы. see_that .

Но я не получил дочернюю таблицу, когда выбираю основную таблицу. Также появляется сообщение об ошибке

failed to lazily initialize a collection of role: com.pojo.one2many.unidirectional.Student.phonenos, no session or session was closed

Мой код добавлен сюда, чтобы вы могли его просмотреть. Пожалуйста, пройдите через это. И дайте мне отличный совет. Student.java. (родительский класс)

@Entity
    @Table(name="STUDENT")
    public class Student {
    private int studentid;
    private String studentName;
    private Set  phonenos;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="studenId")
    public int getStudentid() {
        return studentid;
    }
    public void setStudentid(int studentid) {
        this.studentid = studentid;
    }
    @Column(name="studenName")
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name="studenId") 
    public Set getPhonenos() {
        return phonenos;
    }
    public void setPhonenos(Set phonenos) {
        this.phonenos = phonenos;
    }

Phone.java (дочерний класс)

@Entity
@Table(name = "PHONE")
public class Phone {
    private int phoneid;
    private String phoneNo;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "phoneId")
    public int getPhoneid() {
        return phoneid;
    }
    public void setPhoneid(int phoneid) {
        this.phoneid = phoneid;
    }
    @Column(name = "phoneno")
    public String getPhoneNo() {
        return phoneNo;
    }
    public void setPhoneNo(String phoneNo) {
        this.phoneNo = phoneNo;
    }

мой класс dao

public List getAllStudent() {
         List studentList = null;
         try {
            DetachedCriteria criteria = DetachedCriteria.forClass(Student.class);
             studentList = (List)getHibernateTemplate().findByCriteria(criteria);
              if(studentList != null && ! studentList.isEmpty()){
                 for(Student st :studentList){
                     System.out.println(" st name : "+st.getStudentName());
                     if(st.getPhonenos() != null && ! st.getPhonenos().isEmpty()){
                         for(Phone ph : st.getPhonenos()){
                             System.out.println(" ph no : "+ ph.getPhoneNo());
                         }
                     }else{
                         System.out.println("   phone number is null");
                     }
                 }
             }else{
                 System.out.println("   student null");
             }
        } catch (DataAccessException e) {
            e.printStackTrace();
        }
        return studentList;
    }

Вывод:

failed to lazily initialize a collection of role: com.pojo.one2many.unidirectional.Student.phonenos, no session or session was closed

Здесь я использую однонаправленное (внешний ключ) отображение один-ко-многим (не объединенная таблица, двунаправленное ).

Резюмируя свой вопрос

1) как получить дочернюю таблицу, когда мы получаем родительскую таблицу, и наоборот

2) что является нетерпеливой и ленивой выборкой.

3) таблица однонаправленных, двунаправленных и объединений в случае отображения «один-ко-многим», какая из них более заполнена.

6
задан Vladimir Salin 27 December 2017 в 10:26
поделиться