【发布时间】:2019-08-28 16:18:11
【问题描述】:
我有 2 个实体:歌手和专辑。歌手有几张专辑。我复制了歌手的精华,可以得到他的ID和名字,但是我无法得到他的专辑列表。 我有这个例外
线程“主”org.hibernate.LazyInitializationException 中的异常:无法延迟初始化角色集合:Entity.SingerEntity.albums,无法初始化代理 - 没有会话
@Entity
@Table(name = "\"singer\"")
public class SingerEntity {
@Id
private int singer_id;
private String name;
@OneToMany(mappedBy = "singer_id", cascade = CascadeType.ALL, orphanRemoval = true)
private List<AlbumEntity> albums;
public List<AlbumEntity> getAlbums() {
return albums;
}
public void setAlbums(List<AlbumEntity> albums) {
this.albums = albums;
}
@Entity
@Table(name = "album")
public class AlbumEntity {
@Id
private int album_id;
private String album_title;
private String genre;
private int singer_id;
主要方法:
public static void main(String[] args) {
SingerDAO sDAO = new SingerDAO();
AlbumDAO aDAO = new AlbumDAO();
SingerEntity s1 = new SingerEntity(1, "Singer");
sDAO.insert(s1);
AlbumEntity a1 = new AlbumEntity(1, "a1", "g1", s1);
AlbumEntity a2 = new AlbumEntity(2, "a2", "g1", s1);
AlbumEntity a3 = new AlbumEntity(3, "a3", "g2", s1);
AlbumEntity a4 = new AlbumEntity(4, "a4", "g2", s1);
aDAO.insert(a1);
aDAO.insert(a2);
aDAO.insert(a3);
aDAO.insert(a4);
s1 = sDAO.findById(1);
System.out.println(s1.getId() + " , " + s1.getName());
List<AlbumEntity> albums = s1.getAlbums();
System.out.println(albums.get(0).getAlbum_title());
}
类 SingerDAO:
public class SingerDAO {
public SingerEntity findById(int id) {
Session session = null;
SingerEntity singer = null;
try {
session = HibernateUtil.getSessionFactory().openSession();
singer = (SingerEntity) session.get(SingerEntity.class, id);
Hibernate.initialize(singer);
} catch (Exception e){
e.printStackTrace();
} finally {
if (session != null && session.isOpen()){
session.close();
}
}
return singer;
}
public void select(){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Query query= session.createQuery("from SingerEntity");
List<SingerEntity> list = query.list();
for (SingerEntity s:list) {
System.out.println(s.getName());
}
session.getTransaction().commit();
session.close();
}
public void insert(SingerEntity singerEntity){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(singerEntity);
session.getTransaction().commit();
session.close();
}
public void update(SingerEntity sE){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.update(sE);
session.getTransaction().commit();
session.close();
}
public void delete(SingerEntity sE){
Session session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.delete(sE);
session.getTransaction().commit();
session.close();
}
}
【问题讨论】: