0
저는 스프링 부트, ibatis, jpa 어플리케이션을 실행하려고합니다.JPA 및 스프링 부트와 함께 엔티티 참조 엔티티에 대한 매핑의 반복 열
여기 내 H2 데이터베이스에서 실행 한 sql 스크립트가 있습니다.
CREATE TABLE COMMITTEE(
CODE NUMBER PRIMARY KEY,
NAME VARCHAR2(100),
P_CODE NUMBER,
CONSTRAINT P_CODE_FK FOREIGN KEY (P_CODE) REFERENCES COMMITTEE(CODE)
);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(1, 'Parent 1', NULL);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(2, 'Parent 2', NULL);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(3, 'Parent 3', NULL);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(4, 'Child 1.1', 1);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(5, 'Child 1.2', 1);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(6, 'Child 1.3', 1);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(7, 'Child 3.1', 3);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(8, 'Child 3.2', 3);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(9, 'Child 3.3', 3);
Insert into COMMITTEE(CODE, NAME, P_CODE) VALUES(10, 'Child 3.1.1', 7);
그리고 여기 내 실체 :
package org.gso.committee.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "committee")
public class Committee implements Serializable {
private static final long serialVersionUID = 18787545L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long code;
private String name;
@Column(nullable = true)
private long p_code;
@ManyToOne()
@JoinColumn(name = "p_code")
private Committee parent;
@OneToMany(mappedBy = "parent")
private List<Committee> children = new ArrayList<>(0);
public Committee() {
}
public Committee(long code, String name, long p_code) {
this.code = code;
this.name = name;
this.p_code = p_code;
}
public long getCode() {
return code;
}
public void setCode(long code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getP_code() {
return p_code;
}
public void setP_code(long p_code) {
this.p_code = p_code;
}
public Committee getParent() {
return parent;
}
public void setParent(Committee parent) {
this.parent = parent;
}
public List<Committee> getChildren() {
return children;
}
public void setChildren(List<Committee> children) {
this.children = children;
}
@Override
public String toString() {
return "Committee [code=" + code + ", name=" + name + ", p_code=" + p_code + "]";
}
}
문제는 그 난 항상 오류가 발생하는 경우 : 당신이 같은 별도의 속성으로 p_code를 매핑하는 이유
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: org.gso.committee.model.Committee column: p_code (should be mapped with insert="false" update="false")
감사하지만, 심지어 솔루션 getChildren와 비록() 항상 날은 아이를 추가 할 때 –
당신이 부모를 설정하는 비어 있습니다? 답변에서 편집을 참조하십시오. –
사실, 나는 단지 de getAllCommittees()를 원하고 그리스트와 getChildren()을 가져오고 싶다. 나는 그것이 아주 간단하다고 생각한다. 나는 실체에서 뭔가를 놓치고 있다고 생각한다. –