springJunit4runner를 사용하여 spring + hibernate + JUnit을 실행 중이고 트랜잭션을 기본 롤백으로 설정했습니다. 데이터베이스에서 메모리 내 derbydb를 사용하고 있습니다. Hibernate는 JPA Provider로 사용되며, CRUD 종류의 것들을 성공적으로 테스트하고 있습니다. 그러나 JPA와 @GeneratedValue의 동작에 문제가 있습니다.테스트간에 JPA 생성 값을 재설정합니다.
내 테스트를 하나씩 실행하면 두 엔티티가 id 1과 2로 유지됩니다. 전체 테스트 스위트를 실행하면 ID 대신 6 그리고 7. Spring은 롤백을 잘 수행하므로 추가 후에 데이터베이스에이 두 엔티티 만 있고 전에는 0이됩니다. 그러나 내가 테스트를 위해 그 일을 기분하지 않는
dao.add(Entity e) //method
에서 아이디를 반환하지 않는 @GeneratedValue의 행동은 믿을 수 findById 메소드에 저를 허용하지 않거나 반환하는 것이 좋습니다 어쨌든 그렇게해야만하는 엔티티?
ID 생성을 테이블 기반으로 변환했습니다. 그러나 테스트가 하드 코딩 된 예상 ID에 의존하는 이유는 엔티티를 통해 ID를 확보 할 수 없었기 때문입니다. 특정 상황에서 추가 엔티티 e 메소드에서 제공된 엔티티의 복사본이 만들어지고 해당 복사본에 대한 지속 작업이 수행되었으므로 ID는 원래 개체에서 업데이트되지 않았습니다. 정말 바보 같은 구조 였어. 그래서 나는 그것을 바꿨다. – Rythmic
그게 좋은데 ..미래의 앱 개발을위한 훨씬 더 탄탄한 토대가 될 것이며, 그 견고성을 확보하게되면 장기적인 삶을 훨씬 쉽게 만들어줍니다. –