누구든지 웹 응용 프로그램에 대해 DAO 구현을 제안 할 수 있습니까?최대 절전 모드 DAO 구현
기본 작업 (예 : findByID()
, findALL()
, createObject()
, deleteObject()
등)을위한 트랜잭션을 만들면 어떤 문제가 발생합니까?
지연 작업을 지원하는 DAO 구현을 제안하십시오.
누구든지 웹 응용 프로그램에 대해 DAO 구현을 제안 할 수 있습니까?최대 절전 모드 DAO 구현
기본 작업 (예 : findByID()
, findALL()
, createObject()
, deleteObject()
등)을위한 트랜잭션을 만들면 어떤 문제가 발생합니까?
지연 작업을 지원하는 DAO 구현을 제안하십시오.
Hibernate Tools을 사용하여 코드를 생성하면 기본 DAO가 자동으로 생성됩니다. 당신은 그들 위에 세울 수 있습니다.
어쨌든, 거래에 사용하는 몇 가지 코드는 : 당신의 매핑 및 쿼리에
1) 구성이 제대로 지연로드 :
public void executeTransaction(Object[] parameters, Transact transact) throws ApplicationException
{
Transaction tx = null;
try
{
tx = HibernateSessionFactory.getSession().beginTransaction();
transact.execute(parameters, tx);
tx.commit();
LOG.trace("executeTransaction() success");
}
catch (Exception e)
{
rollback(tx);
throw new ApplicationException(e);
}
}
private void rollback(Transaction tx) throws ApplicationException
{
LOG.warn("rollback()");
if (tx != null)
{
try
{
tx.rollback();
}
catch (Exception ex)
{
LOG.error("rollback() failure",ex);
}
}
}
public interface Transact
{
public void execute(Object[] parameters, Transaction tx) throws Exception;
}
void updateDistrictImpl(final Distretto district) throws ApplicationException, ApplicationValidationException
{
try
{
LOG.trace("updateDistrict[" + distrettoToString(district) + "]");
executeTransaction(new Transact() {
public void execute(Object[] parameters, Transaction tx) throws ApplicationException
{
DistrettoHome DistrettoDAO = new DistrettoHome();
DistrettoDAO.attachDirty(district);
}
});
LOG.info("updateDistrict[" + distrettoToString(district) + "] success!");
}
catch (ApplicationException e)
{
LOG.error("updateDistrict() exception: " + e.getLocalizedMessage(), e);
throw e;
}
}
3 개 주 옵션이 있습니다이 항상 아닙니다 가장 쉬운 방법은 DAO를 개발할 때 프리젠 테이션 레이어에서 개체가 어떻게 사용되는지 항상 알지 못하기 때문입니다.
2) OpenSessionInView 패턴 사용 :이 방법을 사용하면 프리젠 테이션 계층에서 관련 객체를 지연로드 할 수 있습니다. 이것은 아마도 약간의 구성 만 필요하기 때문에 가장 쉬운 방법 일 것입니다. 그러나 게으른로드가 꽤 비쌀 수 있으므로 프리젠 테이션 계층에서 뭔가 비명을 지르는 경우 성능 문제가 발생할 수 있으므로주의하십시오. 프리젠 테이션에서 오브젝트를 수정할 수도 있습니다. 즉, 프리 그래밍 오류를 만드는 것이 더 쉽습니다.
3) Hibernate 오브젝트를 값 오브젝트로 변환하는 서비스 계층을 추가하십시오. 이것은 프리젠 테이션에 노출 된 wchi 특성을 제한 할 수 있으므로 가장 정교한 옵션입니다. 서비스 호출을 중심으로 트랜잭션 경계를 유지하므로 서비스 밖에서는 아무 것도 수정되지 않을 것입니다.
모든 경우에 게으른 로딩을 올바르게 구성해야합니다. 그렇지 않으면 성능 문제가 발생할 것입니다.
나는 게으른 초기화를 할 수 있습니다. – user93796
자세히 설명해 주시겠습니까? 두려운 "Lazy Initialization Exception"을 얻고 있습니까? –
청원은 내가 게으른 초기화 문제를 해결할 수있는 방법을 말해줍니다. 나는 DAO와 같은 계층 구조 레이어에서 변환을 관리하고 싶습니다. – user93796