이것은 이상한 문제이지만 거기에 간다!최대 절전 모드의 flush() 메소드에서의 무한 재귀
문맥에 넣기 : 나는 JUnit 테스트를 구현하고 있는데 나는 songJPA라는 클래스를 테스트 중이다. 나는 노래 (OK)를 만든 다음 같은 이름의 노래를 만들고 예외 (OK)를 예상하고 마침내 첫 번째 노래 만들기 (다음 실행 테스트 시간에 오류가 발생하지 않음)를 삭제하려고합니다.
문제는 내가 개별적으로 DeleteSongTest()를 실행하면 작동하고 노래를 삭제하지만, 모두 실행하면 작동하지 않는다는 것입니다. 무한 재귀를 입력합니다. flush() 메서드에서 문제가 발생한다고 생각하고 디버깅하려했지만 불가능합니다.
저는 작업중인 모든 수업을 붙여 넣습니다.
JUnit 테스트 클래스 :
public class SongCRUDTest {
private SongJPA testSong1;
private SongJPA testSong2;
private SongJPAJpaController slc;
@Before
public void setUp() {
testSong1= new SongJPA("TestTitle", 120, 19, new SongInfoJPA(), "TestArtist", Genre.CLASSICAL);
testSong2= new SongJPA("TestTitle", 122, 12, new SongInfoJPA(), "TestArtist2", Genre.BLUES);
slc = new SongJPAJpaController();
}
@Test
public void A_createSong(){
slc.create(testSong1);
}
@Test(expected = PersistenceException.class)
public void B_createDuplicatedTestSong() {
slc.create(testSong2);
}
@Ignore
@Test
public void C_deleteSong() throws NonexistentEntityException{
SongJPA songToDelete= slc.findSongJPAByTitle("TestTitle");
if(songToDelete!=null)
slc.destroy(songToDelete.getId());
}
은 내가 개별적으로 실행할 경우에만 작동 방법을 파괴한다.
public void destroy(int id) throws NonexistentEntityException {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
SongJPA songJPA;
try {
songJPA = em.getReference(SongJPA.class, id);
songJPA.getId();
} catch (EntityNotFoundException enfe) {
throw new NonexistentEntityException("The songJPA with id " + id + " no longer exists.", enfe);
}
em.remove(songJPA);
em.flush();
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}
EDITION1 (A 넷빈즈 템플릿에서인가) : create() 메소드 도움
public void create(SongJPA songJPA) { EntityManager em = null; try { em = getEntityManager(); em.getTransaction().begin(); em.persist(songJPA); em.getTransaction().commit(); } finally { if (em != null) { em.close(); } } }
초 이후
54587 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 1205, SQLState: 41000 54587 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Lock wait timeout exceeded; try > restarting transaction
TIA !!!!
'create()'방법을 보여줄 수 있습니까? – axtavt
물론 @axtavt – migueloop