2010-07-22 3 views
2

모든 테이블이 Java JPA/Hibernate 코드에 의해 생성 된 데이터베이스가 있습니다. 나는상위 행을 삭제하거나 업데이트 할 수 없음 - JPA (최대 절전 모드)

UPDATE Department SET id=100000 WHERE id=0; 

불행하게도 이것은 오류가 발생,이 유사한 방식으로 내 데이터베이스에 여러 테이블을 갱신 할 필요가

ERROR 1451 (23000) : 삭제하거나 부모 행을 업데이트 할 수 없습니다하십시오 외래 키 제약 조건이 실패 (departmentuserlink, CONSTRAINT FK96AF44EAB09C41C5 FOREIGN KEY (department_id) 참조 부서 (ID)) 다음은

는 자바 엔티티 :

@Entity 
@Table(name="Department") 
public class Department extends AbstractEntity implements IAbstractEntity { 

@OneToMany(cascade=CascadeType.ALL, mappedBy="department", fetch=FetchType.EAGER) 
private Set<DepartmentJobLink> departmentJobs = new HashSet<DepartmentJobLink>(0); 

    //Setters & getters and all that 
} 



@Entity 
@Table(name="edrDepartmentJobLink",  uniqueConstraints={@UniqueConstraint(columnNames={"department_id", "job_id"})}) 
public class DepartmentJobLink extends AbstractEntity implements IAbstractEntity { 

@ManyToOne(fetch=FetchType.EAGER) 
@JoinColumn(name="department_id", nullable=false) 
private Department department; 

    //Setters & getters and all that 
} 

둘 다 수퍼 클래스에 ID가 있습니다. 지금까지는 다른 모든 것들이 훌륭하게 작동하고 부서의 기본 키를 업데이트하는 데 어려움을 겪고있는 것처럼 보입니다. 나는 어떤 조언을 주셔서 감사하겠습니다. 감사.

답변

2

글쎄, 어떤 외래 키가 업데이트됩니까? 어떤 다른 테이블에 을 가리키는 department_id 열의 외래 키 제약 조건이 있으므로 department.id 값을 변경할 수없는 것 같습니다.

이것은 실제로 데이터가 신뢰할 수 있다는 의미이므로 "좋은 것"입니다. 당신은 또한 (다른 영향을받는 테이블뿐만 아니라) department.id와 함께 영향을받는 테이블의 department_id 열을 업데이트 할 수 있도록

당신은 당신의 UPDATE 문을 변경해야하거나 변경되도록 선택적으로 당신은 외래 키 제약 조건을 ALTER 수 계단식. 이 작업을 수행하는 구문은 데이터베이스 구현에 따라 달라집니다.

이것은 실제로 JPA 나 Hibernate와는 아무런 관련이 없습니다. 이것은 데이터베이스에서 선언 된 외래 키 제약 조건의 결과입니다 (이것은 Hibernate 매핑에서 왔을 수 있고 Hibernate에서 데이터베이스 스키마를 자동 생성합니다). 스키마 생성 도구이지만, 지금은 관련이 없다).

+0

그래서 당신이 말하는 것과 PhpMyAdmin의 테이블을 조금 보았을 때, 열 주석의 cascade = CascadeType.ALL은 실제 테이블에 계단식 업데이트를 설정하지 않습니다. JPA를 통해 테이블 ​​자체에 계단식 업데이트를 추가하는 방법이 있는지 알고 계시나요? 필요할 때 직접 추가하여 제공하는 것이 가장 좋을까요? 입력 해 주셔서 감사합니다. 나는 지금 무슨 일이 일어나고 있는지 더 잘 이해하고 있다고 믿는다. – Donny

+0

JPA가 테이블을 생성하지 않습니다. JPA 주석/최대 절전 모드 매핑에서 테이블 정의 * 기반 *을 자동으로 생성 할 수있는 도구가있을 수 있지만 JPA를 사용하면 테이블 생성이 처리된다는 의미가 아닙니다. JPA의 관점에서 "계단식"이란 의미가 다른 것을 의미합니다. –

관련 문제