SSH+JPA는 add 작업을 한 번만 수행할 수 있으며 해결 방법은

1591 단어 ssh
환경 SSH+JPA2, 서버를 다시 시작할 때마다 add 작업을 한 번만 수행할 수 있는 이상한 문제가 발생했습니다. 이상한 보고는 다음과 같습니다.
 
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.dalton.domain.Department

org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException
.................................................

 
서버를 다시 시작할 때마다add를 한 번, 두 번째로 오류를 보고할 수 있습니다.
debug를 통해 두 번째add가 필요한department 대상이 업데이트되지 않은 것을 발견했습니다. 모두 id값을 포함하여 처음 발생한 것입니다.다시 말하면 제가 department를 두 번째로 삽입했을 때 데이터베이스에 실례화되지 않았을 때 ID 값이 생겼고 이 ID 값은 제가 처음으로 사용자의 ID를 삽입한 것입니다. 이것은 비정상입니다. 왜냐하면 ID가 설정된 적이 없기 때문입니다. 그리고 JPA의 기본적인 행위는 키 생성 정책을 지정하면 키를 설정할 수 없습니다. 비어 있거나 0이 되지 않으면 데이터베이스에 저장된 것으로 간주됩니다.퍼시스트 () 방법을 호출하면 위의 이상을 던집니다.
 
JavaBean Department의 역할 영역 설정이 잘못되었기 때문에 기본 단례적인 설정을 사용했습니다. Action에 있어서 반드시 사용해야 합니다
prototype (호출할 때마다 하나의 객체를 만듭니다) 의 역할 영역입니다. 수정 방법은 JavaBean Department에서 @Scope ("prototype") 를 참고하는 것입니다.
 
 
 
@Entity
@Component("department")
@Scope("prototype")
@Table(name="Department")
public class Department {
        /* id */
	private int id ;
	
	/* id */
	private int pid ;
	
	/*  */
	private String name ;
..............................................................................
 
 
이렇게 문제를 해결하다.
그러나 앞의 자바빈에는 이것을 추가하지 않았지만'@Component("department")'라는 주석도 없습니다. 이 주석이 영향을 미쳤는지 테스트가 없습니다.

좋은 웹페이지 즐겨찾기