Hibernate
을 사용하는 응용 프로그램에서 데이터베이스의 일부 레코드를 삭제하려고합니다. 관련 엔티티는 다음과 같습니다최대 절전 모드 OneToMany 연결에서 레코드 삭제
@Entity
public class Product {
private String serialNumber;
private Set<Part> parts = new HashSet<Part>();
@Id
public String getSerialNumber() { return serialNumber; }
void setSerialNumber(String sn) { serialNumber = sn; }
@OneToMany
public Set<Part> getParts() { return parts; }
void setParts(Set parts) { this.parts = parts; }
...
}
@Entity
public class Part implements Serializable {
@Id
@GeneratedValue
private Long part_id;
private String userCode = "";
//getters and setters
....
}
내가 할 수있는 이클립스 part_id
및 userCode
에 따라 Entity Part
에 등호와 hashCode를 구현합니다. 또한 Entity Factory
에서 다른 엔티티와의 모든 연결을 '시작'합니다. 따라서 모든 변경 사항을 저장하려면 명령을 실행하기 만하면됩니다.
session.update(factory);
모든 변경 사항은 부품에서 삭제 된 경우를 제외하고 성공적으로 저장됩니다. 내가 수행 밖으로 comig
products.getParts.remove(part);
이슈는 다음과 같습니다
어떤 경우에는1)이 Set
equals
와 true
반환에 part
에 비교합니다 (part
가에 있지만 제거하지 Set
에서 part
입니다 Set
은 같음에 따라 제거되지만 지워지지 않음)
2) 이 Set
에 성공하더라도 데이터베이스의 레코드는 삭제되지 않습니다.
쿼리를 사용하지 않고이 경우 레코드를 제거하는 가장 좋은 방법은 무엇입니까?
Hibernate Docs에서 제안 된대로 시도했지만 예외가 발생합니다. 부모 행을 삭제하거나 업데이트 할 수 없습니다. 외래 키 제약 조건이 실패합니다. Part 클래스에서 Produkt라는 속성이 없다는 사실을 알아야한다. 그게 필수입니까? – arjacsoh
예, 필수적입니다. 그것은 외래 키가 지정된 곳입니다. 'Part' 클래스에서는'Product'를 갖는'@ ManyToOne'을 가져야합니다. – isah
@arjacsoh : 관계 유지 보수는 어플리케이션의 책임입니다. 삭제할 엔티티가 다른 테이블의 foreign 키의 대상이면 제거를 성공 적으로 수행하려면 외래 키를 지워야합니다. – wypieprz