나는 하나의 부모/자식 @OneToMany
을 가지고 있는데 컬렉션은 Set
(중복 없음)입니다. 서버의 Parent에서 자식에 액세스하려고하면 아래 오류가 발생합니다.최대 절전 모드 너무 게으름
request.setAttribute
을 통해 클라이언트 측에 Parent를 전달하고 JSTL을 사용하여 Parent에 액세스하면 Child 객체 멤버에 직접 액세스 할 수 있습니다. 학부모/자녀에게는 게터/세터가 있습니다. 내가 톰캣 6.0.32, 봄 3.1.0, JDK6 사용하고
, 어린이
@Entity
@Table(name="SUSER")
public class SUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int su_id;
@Column(name="displayname", nullable=true,
columnDefinition="varchar", length=50, insertable=true, updatable=true)
private String displayname;
@Column(name="last_activity", nullable=true, columnDefinition="datetime",
insertable=true, updatable=true)
private String last_activity;
@Column(name="ldapuser", nullable=true, columnDefinition="varchar",
length=50, insertable=true, updatable=true)
private String ldapuser;
@OneToMany
@org.hibernate.annotations.IndexColumn(name="SU_ID")
@JoinColumn(name="su_id", insertable=true, updatable=true)
private Set<SUserAttributes> suattr = new HashSet<SUserAttributes>();
상위 3
최대 절전 모드
@Entity
@Table(name="SUSER_ATTRIBUTES")
public class SUserAttributes {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int sua_id;
@Column(name="su_id")
private int su_id;
@Column(name="sua_key", nullable=true, columnDefinition="varchar",
length=64, insertable=true, updatable=true)
private String sua_key;
@Column(name="sua_value", nullable=true, columnDefinition="varchar",
length=128, insertable=true, updatable=true)
private String sua_value;
DAO
,451,515,package com.oasis.implementation.dao;
import java.util.LinkedList;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import com.oasis.implementation.ClientInfo;
import com.oasis.implementation.SUser;
public class SUserDaoImpl implements SUserDao {
@SuppressWarnings("unused")
private static Logger logger = Logger
.getLogger(ClientDownloadsDaoImpl.class);
@Autowired
@Qualifier("implementationSessionFactory")
private SessionFactory sessionFactory;
@SuppressWarnings("unchecked")
@Override
public List<SUser> getAllSUsers(){
List<SUser> suList = null;
Session session = null;
try
{
session = sessionFactory.openSession();
session.beginTransaction();
suList = session.createQuery("from SUser").list();
session.getTransaction().commit();
}
catch (RuntimeException e)
{
System.out.println (e.getMessage());
}
finally
{
if (session != null)
{
session.close();
}
}
return suList;
}
@Override
public List<SUser> getSUserById(int su_id) {
Session session = null;
SUser sUser = null;
LinkedList<SUser> suList = new LinkedList<SUser>();
try {
session = sessionFactory.openSession();
session.beginTransaction();
sUser = (SUser) session.get(SUser.class, su_id);
suList.add(sUser);
session.getTransaction().commit();
} catch (RuntimeException e) {
System.out.println(e.getMessage());
} finally {
if (session != null) {
session.close();
}
}
return suList;
}
@Override
public List<SUser> getUserByLdap(String ldapuser){
Session session = null;
int user_id = 0;
List<SUser> suList = null;
try
{
session = sessionFactory.openSession();
session.beginTransaction();
SQLQuery sqlq = session.createSQLQuery("select su_id from
suser where ldapuser = '" + ldapuser + "'");
user_id = (Integer)sqlq.uniqueResult();
suList = getSUserById(user_id);
session.getTransaction().commit();
}
catch (RuntimeException e)
{
System.out.println (e.getMessage());
}
finally
{
if (session != null)
{
session.close();
}
}
return suList;
}
}
오류 메시지
Hibernate: select suser0_.su_id as su1_11_0_, suser0_.displayname as
displayn2_11_0_, suser0_.last_activity as last3_11_0_, suser0_.ldapuser as l
dapuser11_0_ from SUSER suser0_ where suser0_.su_id=?
ERROR - failed to lazily initialize a collection of role: com.oasis.implementation.SUser.suattr, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.oasis.implementation.SUser.suattr, no session or
session was closed
at
EAGER 가져 오기 접근 방식을 사용했습니다. – user931501
답변을 수락 할 수 없습니다. 좋아요/싫어요 아이콘이 없습니다. – user931501
get (Object.class, id) 메서드를 사용하여 객체를 가져 오는 것이 객체를 가져 오지는 않지만 객체에 대한 참조 (proxy)를 얻는 것을 이해합니다.Hibernate가 객체를 얻으려면, 서버 측에서 객체의 다른 데이터 멤버에 액세스해야한다. 나는 서버 측에서 이것을 시도했지만 객체를 얻지 못했습니다. ???? – user931501