JPA를 찾았거나 비슷하게 DAO 패턴을 권장하지 않습니다. 나도 잘 모르지만, 특히 서버 관리 JTA 관리자와 같은 느낌.JPA가 비슷하게 DAO 패턴을 권장하지 않습니다.
DAO 패턴을 사용한 적절한 실습을 통해 필자는 그 패턴을 중심으로 JPA 기반 응용 프로그램을 디자인하기 시작했습니다. 그러나 그것은 IMO에 적합하지 않습니다. JPA와 모든 기능을 상당히 잃어 버리는 경향이 있습니다.
음, 비관적 잠금을 사용하여 쿼리를 실행하고 DAO 메서드에서 쿼리 목록을 반환했다고 가정합니다. 반환시 트랜잭션은 끝나고 잠금은 사라집니다 (서버 관리 JTA 관리자의 경우). 그래서, 아무 의미, 느슨하게 말하기. 그러나 유효한 경우가 있습니다.
또 다른 예는 훨씬 더 사소합니다. 쿼리를 실행하여 일부 엔티티를 가져오고, 다른 엔티티와의 게으름로드 일대 다 연관이 있다고 가정 해보십시오. DAO 메소드를 반환하면 트랜잭션이 종료됩니다. 게으른 로딩은 더 이상 작동하지 않으며, 당신은 단순히 null
또는 뭔가를 얻을. 이를 극복하기 위해 우리는 그것을 수동으로 열심히로드합니다. 우리는 a.getBList().size()
같은 것을합니다.
따라서 IMO는 DAO를 독점적으로 만들지 않고 비즈니스 빈에서 수행하는 것이 좋습니다. 이렇게하면 유용한 기능을 활용할 수 있습니다. 또는 ORM API는 아마도 DAO/데이터 계층 자체로 간주 될 수 있습니다. 그래서, 우리는 다른 것을 만들 필요가 없습니다.
여러분의 의견을 생각해보십시오.
참고 : 나는 DAO 패턴이 더 이상 사용되지 않는다고 말하지 않습니다. 실제로 경우에 따라 다릅니다.
(+1) 나는 마음에 특별한 것이 없다면, dao 계층을 만들 이유가 없다는 것에 동의하는 경향이있다.심지어 일반적인 DAO, 엔티티를위한 별도의 DAO 클래스는 물론입니다. – Bozho
Java EE JAX-RS/JPA 코드를 테스트하는 좋은 방법을 찾는데 어려움을 겪었습니다. 실행 가능한 "container-in-the-tests"솔루션을 얻으려고 악몽이었습니다. 주요 측면은 테스트에서 @ Context PersistenceContext를 주입하는 것입니다. 나는 Dao를 테스트에서 불러내 어 생성자와 함께 @ EJB Dao를 사용하여 Dao를 깨끗하게 만들 것이라고 생각합니다. –