2017-05-19 7 views
0

나는 persist 확장과 함께 guice 4.1을 사용하고 @Transactional이 작동되기를 기대하지만, 그렇지 않습니다. 사용 guice - @Transactional - not working

  • 을-지속 guice

    1. 을에 따라 : 나는 위키을 따라이 게시물을 읽을 수 있지만 아무 소용이 :

      Managing transactions in JavaSE with Hibernate and Guice

      그냥 ... 내가 뭐하는 거지 다시 반복 google 's @ Transactional annotation

    2. guice가 관리하는 공개 또는 보호 된 메소드에서만 주석을 사용합니다.
    3. PersistService를 시작합니다 ...
  • +0

    시도 SO에 대한 솔루션을하지만, 명시 적으로 관리 끝났다. entityManager.getTransaction를() (시작); entityManager.persist (엔터티); entityManager.getTransaction(). commit(); – Justas

    답변

    0

    현재 스프린트에서 라이브러리를 업그레이드 할 때 비슷한 문제가 발생했습니다. 모든 실패한 단위 테스트는 우리가 주입되는 클래스와 관련이 있었지만 모듈에서 바인딩되지 않았습니다.

    (Guice 4.0에서는 문제가되지 않음).

    인터페이스 나 특정 요구 사항에 바인딩하는 경우에만 클래스를 바인딩하는 경향이 있습니다. 따라서 인수 생성자가 없거나 @Inject로 주석 처리 된 간단한 클래스가있는 경우 모듈에서이 클래스를 바인딩하지 않습니다. 클래스 AA 주입 된 경우

    public class AA { 
    
        public AA() { 
    
        } 
    
        @Transactional 
        public void test() { 
         System.out.println("" + getClass().getName()); 
        } 
    } 
    

    호출 테스트() 것 출력

    package.test.AA$$EnhancerByGuice$$e2d19b62 
    

    4.1 Guice 출력을 업그레이드 한 후는

    package.test.AA 
    

    는 모듈 변경에 다음을 추가 다시 프록시에 주입. 어떤는 @Transactional이 AOP를 사용하여 작동하는 방법이다

    bind(AA.class); 
    
    +0

    고마워, 나는 실제로 그것도 오늘 실제로 발견했다. 그것은 아마도 따라야 할 모범 사례 일 것입니다. – Walter