2017-11-30 17 views
0

내 학습 프로젝트에서 이러한 요소를 가지고 있고이 직원 추가 할 수 없습니다 나는 왜 알아낼 수와 개체를 추가하는 데 실패 :봄이 ManyToOne

@Entity 
@Table(name = "department") 
@Data 
public class Department { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "department_id") 
    @JsonProperty("department_id") 
    private Long department_id; 

    @Column(name = "department_name") 
    @JsonProperty("department_name") 
    private String department_name; 
} 

@Entity 
@Table(name = "office") 
@Data 
public class Office { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "office_id") 
    @JsonProperty("office_id") 
    private Long office_id; 

    @Column(name = "office_name") 
    @JsonProperty("office_name") 
    private String office_name; 
} 

@Entity 
@Table(name = "employee") 
@Data 
public class Employee { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "employee_id") 
    @JsonProperty("employee_id") 
    private Long employee_id; 

    @Column(name = "employee_name") 
    @JsonProperty("employee_name") 
    private String employee_name; 

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

    private Long office_id; 
} 

가 우체부를 사용하여, 나는 POST를 보내 다음 JSON 본체와 함께 봄 데이터 REST에 의해 생성 된 http://localhost:9096/employee 엔드 포인트를 사용하여 부서 '엔지니어'에 직원을 추가 :

{ 
    "employee_name": "Tim", 
    "office_id" : 1, 
    "department": { 
     "department_id": 1 
    } 
} 

난 항상 예외가 : "열은 null 일 수 없습니다 'department_id'".

이 문제를 해결하기위한 올바른 방법은 무엇이 있습니까?

전체 프로젝트

은 department_id가 데이터베이스에 존재하지 않는 것 같은데 https://github.com/txt8888/sping-mysql-db

답변

2

에서 동작하는 예제를 확인하실 수 있습니다

@Entity 
@Table(name = "course") 
public class Course implements Serializable{ 

    private int id; 
    private Set<Student> students; 

    public Course(){ 

    } 
    @OneToMany(mappedBy = "course", cascade = CascadeType.ALL) 
    public Set<Student> getStudents() { 
     return students; 
    } 
} 

@Entity 
public class Student implements Serializable{ 
    private int id; 
    private Course course; 

    public Student() { 

    } 

    @ManyToOne 
    @JoinColumn(name = "course_id") 
    public Course getCourse() { 
     return course; 
    } 
} 

이하이 ManyToOne 관계를 참조 할 수 있습니다.함으로써 (. 예 : 부서)는 자원을 연결하는 또 다른 (. 예를 들어 직원) 원한다면 기본적으로, 당신은 예를 들어, 자원의 링크를 이용해 :

{ 
    "employee_name": "Tim", 
    "office_id" : 1, 
    "department": "http://localhost:9096/departments/1" 
} 

이것은 부서에 연결된 신입 사원을 만듭니다 ID가 1 인 직원을 새로운 부서에 연결하려면 먼저 부서를 생성하고 동일한 방식으로 직원에게 연결해야합니다.

0

에서 확인 또는 ManyToOne 구성이 제대로되지 않습니다 수 있습니다. 그래서 그 오류가 발생합니다. 당신은 봄 데이터 REST는 { "department_id": 1 }를 사용하여 해당 (같은 부서를 내장 지원하는 경우는 잘 모르겠어요 포스트 Spring Boot JPA One to Many Relationship Mapping

+0

'department_id'가 데이터베이스에 존재합니다. 참고 자료/schema-mysql.sql –

+0

아니요, 열 이름이 아니라 해당 값을 의미합니다. –