에 게으른 부하를 유발 ...Hibernate는 프록시를 초기화하지 수 - 아니 세션 : LCDS 일부 더러운 사업은 AMF 서블릿에서 일어나는 모든 컬렉션
임없이 DTO의 목록을 검색 supused하는 DAO 메소드를 호출
public List<NivelesPlantillasDto> getList()throws HibernateException{
logger.info("getList()");
List<NivelesPlantillasDto> list = new ArrayList<NivelesPlantillasDto>();
Session session = null;
try{
session = SessionFactory.getInstance().openSession();
list=(List<NivelesPlantillasDto>)session.createQuery("from NivelesPlantillasDto").list();
}catch(HibernateException HE){
logger.info(HE.getMessage(),HE);
if (session!=null && session.isConnected())
session.close();
throw HE;
}
if (session.isConnected())
session.close();
return list;
}
을 그리고 이것은, BECA이 오류는 세션을 종료 후 오는 hbm.xml
<hibernate-mapping>
<class name="architecture.dto.NivelesPlantillasDto" table="nivelesplantillas">
<id name="pkNivelPlantilla" type="int">
<column name="PKNIVELPLANTILLA" />
<generator class="identity" />
</id>
<property name="plantilla" type="java.lang.String">
<column name="PLANTILLA" />
</property>
<set name="habilidadesList" table="habilidades" inverse="true" lazy="true">
<key foreign-key="FKNIVELESPLANTILLAS" not-null="true">
<column name="FKNIVELESPLANTILLAS" sql-type="int"/>
</key>
<one-to-many class="architecture.dto.HabilidadesDto"/>
</set>
<set name="nivelesList" table="niveles" inverse="true" cascade="merge,delete-orphan" order-by="indice" lazy="true">
<key foreign-key="FKNIVELESPLANTILLAS" not-null="true">
<column name="FKNIVELESPLANTILLAS" sql-type="int"/>
</key>
<one-to-many class="architecture.dto.NivelesDto"/>
</set>
<property name="activo" type="boolean">
<column name="ACTIVO" />
</property>
</class>
</hibernate-mapping>
입니다 : 자바에서 원격 개체를 통해 어떤 아이들은 플렉스하기 Hibernate가 객체를 AMF Servlet에서 deserialize 할 때이 클래스의 모든 자식을로드하려고 시도 할 때 세션을 열린 상태로 두어 모든 자식에 대한 쿼리를 볼 수 있습니다. 따라서이 오류에 대한 2 가지 수정 사항이 없어지므로 하나는 일대 다 관계에 lazy="false"
을 설정하고 두 번째는 AMF가 모든 하위 항목을로드 할 때까지 세션을 열린 채로 두는 것이지만 원하는 것은 아닙니다. 왜 모든 어린이들을 강제로 강제로 끌고 가야합니까?
편집 : 좋아, 난 못생긴 방식으로 수정 ... 목록의 복제본을 검색 했으므로이 하나가 deserialize되면 어떤 최대 절전 모드 쿼리도 트리거되지 않습니다. 컬렉션이 게으르게로드되는 것을 LCDS에 알릴 수있는 방법이 있습니까?
게으른 관계가 아닌 완전히 느린 응용 프로그램을 수정하면 모든 것을 복제해야하는 바인딩 된 개체를 일반 개체로 바꿀 수 있습니까? – Ziul
@ user1601662 "모든 것을 복제하는 것과 관련이없는 바인딩 된 객체를 일반 객체로 변환"- 미안하지만 이해가 안됩니다. –
게으른 콜렉션이 프록시 객체로 검색된다는 것을 의미합니다. 런타임에 일반 객체를 가져 오는 방법이 있습니까? – Ziul