두 엔티티 - IssueDTO
과 TicketDTO
이 거의 같습니다. 클라이언트 측에서는 IssueDTO
및 TicketDTO
에 대한 항목을 읽고 RPC을 통해 데이터베이스에 저장했습니다.하나의 엔티티가 저장되고 다른 엔티티는 저장되지 않습니다 - 왜?
표현 계층 -
...
private void saveIssue() {
IssueDTO issueDTO = new IssueDTO(...);
ticketService.saveOrUpdateIssue(issueDTO, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
// ...
}
public void onSuccess(Void noAnswer) {
// ...
}
});
}
...
private void saveTicket() {
TicketDTO ticketDTO = new TicketDTO(...);
ticketService.saveOrUpdateTicket(ticketDTO, new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
// ...
}
public void onSuccess(Void noAnswer) {
// ...
}
});
}
DAO 층 -
TicketDAO
-
@Repository("ticketDAO")
public class TicketDAO extends AbstractHibernateJpaDAO<Long, TicketDTO> {
@PersistenceContext(unitName = "PersistenceUnit")
EntityManager entityManager;
@Override
protected EntityManager getEntityManager() {
return entityManager;
}
}
IssueDAO
-
@Repository("issueDAO")
public class IssueDAO extends AbstractHibernateJpaDAO<Long, IssueDTO> {
@PersistenceContext(unitName = "PersistenceUnit")
EntityManager entityManager;
@Override
protected EntityManager getEntityManager() {
return entityManager;
}
}
만 저장된 엔티티 TicketDTO
그리고 그들을 검색 할 수 있습니다. 그러나 엔터티 IssueDTO
을 저장하고 추출하려고하면 클라이언트 위젯을 업데이트합니다. 아무 것도 나타나지 않지만 클라이언트는 IssueDTO
이 성공적으로 보존되었다는 메시지를 받고 onSuccess
메서드를 실행합니다.
서비스 계층 - 서블릿 TicketServiceImpl
의
있어서, I는 (방법이 유사) 저장소 엔티티에 사용하는 -
...
@Autowired
private IssueDAO issueDAO;
@Autowired
private TicketDAO ticketDAO;
public void saveOrUpdateIssue(IssueDTO issueDTO) throws Exception {
// TODO Auto-generated method stub
try {
if(issueDTO.getIssueId() == null) {
issueDAO.persist(issueDTO);
} else {
issueDAO.merge(issueDTO);
}
} catch (Exception e) {
LOG.error(e);
throw e;
}
}
...
I 엔티티를 추출 할 때 사용하는 서블릿에있어서 -
0 - 내가 상속 클래스AbstractHibernateJpaDAO
에
...
public List<IssueDTO> findAllIssues() {
// TODO Auto-generated method stub
List<IssueDTO> findAll = issueDAO.findAll();
List<IssueDTO> result = new ArrayList<IssueDTO>();
for(IssueDTO issue : findAll) {
result.add(new IssueDTO(issue));
}
return result;
}
...
방법
public abstract class AbstractHibernateJpaDAO<K, E> {
protected Class<E> entityClass;
@SuppressWarnings("unchecked")
public AbstractHibernateJpaDAO() {
ParameterizedType genericSuperclass = (ParameterizedType) getClass()
.getGenericSuperclass();
entityClass = (Class<E>) genericSuperclass.getActualTypeArguments()[1];
}
...
@SuppressWarnings("unchecked")
public List<E> findAll() {
String queryStr = "SELECT h FROM " + entityClass.getName() + " h";
Query query = getEntityManager().createQuery(queryStr, entityClass);
List<E> resultList = query.getResultList();
return resultList;
}
public void persist(E entity) {
getEntityManager().persist(entity);
}
public E merge(E entity) {
return getEntityManager().merge(entity);
}
...
내 applicationContext.xml
-
<beans ... >
<context:annotation-config />
<tx:annotation-driven />
<context:component-scan base-package="com.mypackage.default" />
<bean class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" id="entityManagerFactory">
<property name="persistenceUnitName" value="PersistenceUnit" />
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
</beans>
왜에만 TicketDTO
저장하지만, IssueDTO
를 저장하지? 각 엔터티에서 작업하려면 원격 서비스를 작성해야합니까?
감사합니다.
죄송합니다.'saveOrUpdateIssue' 메소드에'@Transactional (propagation = Propagation.REQUIRED, rollbackFor = Exception.class) '주석을 달고 싶지 않습니다. 이제 확인하겠습니다. –