2017-11-29 16 views
3

를 만들 설정 나는 새로운 프로젝트를 만들려고 할 때 그래서최대 절전 모드에서 모두 교차 참조가 나는 두 엔티티, 프로젝트 및 ProjectFee이

<class name="com.package.Project" table="project"> 
    <id name="id" type="java.lang.Integer"> 
     <column name="id" /> 
     <generator class="identity" /> 
    </id> 
    <!-- more fields --> 
    <set name="fees" table="project_fees" cascade="all" fetch="join" lazy="false"> 
     <key> 
      <column name="id_project"/> 
     </key> 
     <one-to-many class="com.package.ProjectFees"/> 
    </set> 

</class> 

<class name="com.package.ProjectFees" table="project_fees"> 
    <!-- more fields --> 
    <property name="idProject" type="java.lang.Integer"> 
     <column name="id_project" /> 
    </property> 
</class> 

하고 새 ProjectFee 사용하여 IdProject는 db에서 null이 될 수 없기 때문에 오류가 발생하고 Project는 아직 생성되지 않았기 때문에 id가 설정되지 않았기 때문에 setted되지 않습니다.

  1. 만들기 프로젝트
  2. 에서 ProjectFees를 제거 프로젝트
  3. 각각
  4. 업데이트 프로젝트
에 대한 idProject을 설정 로젝트에 ProjectFees 추가 : 나는 방법을 만들에 내가 수행하여 그것을 해결할 수있어

하지만 이것은 일종의 "더러운"방법이므로 자동으로 수행 할 수있는 방법이 있는지 알고 싶습니다.

+0

관계의 양쪽에 참조를 설정하고 유지하십시오. –

+0

@AbdullahKhan 문제는 프로젝트가 데이터베이스에 아직 존재하지 않기 때문에 Project.id를 가지고 있지 않기 때문에 내가 할 수 없다는 것입니다. – Aldeguer

답변

1

이에 ProjectFees 매핑을 변경합니다

<many-to-one name="idProject" class="com.gesmifid2.common.model.Project"> 
    <column name="id_project" /> 
</many-to-one> 

편집 :

귀하의 ProjectFee 클래스는 다음과 같아야합니다

public class ProjectFee implements Serializable { 
    //some more fields 
    private Project project; //project ProjectFee is related to 
} 

을 그리고 때마다 당신이 Project 새로운 ProjectFee을 추가, ProjectProjectFee에 설정해야합니다. Project 수업 방법의 예 : 당신이 밀접하게 ProjectFee 클래스를 보면, (외래 키 id_project 등)은이 어떻게 든 클래스 Project 관련이 있음을 알 수있는 방법이 없습니다

public void addProjectFee(ProjectFee pf){ 
    fees.add(pf); 
    pf.setProject(this); 
} 
+0

여전히 같은 오류,'Caused by : com.mysql.jdbc.exceptions.jdbc4 .MySQLIntegrityConstraintViolationException : 'id_project'열이 null이 될 수 없습니다. ' – Aldeguer

+0

그래, 작동하지만 ProjectProject의 전체 프로젝트가 아닌 idProject 만 갖고 싶습니다. – Aldeguer

+0

@Aldeguer 실제로 ORM (양방향 매핑)에서 데이터베이스 객체를 처리하는 방법입니다. . 데이터베이스 측에서 대신 해당 테이블에서 ID 만 가져옵니다. –

0

. 그래서 두 객체를 함께 저장할 때 ProjectFee 클래스는 클래스의 ID 열 값을 가진 id_project 열을 채워야한다는 것을 알고 있습니다.

는 두 가지 가능성이있다 -

  1. 어느 첫번째 Project 객체를 저장하고 ProjectFee 객체에 ID를 제공함으로써 (이 질문에서 언급) 당신은 자신에 의해 id_project 열을 채 웁니다.
  2. Project 유형의 id_project 속성을 사용하여 엔티티에서 외래 키 관계를 만들고 id/id_project 열에 두 항목을 모두 가입시킵니다.

희망이 있습니다.

+0

첫 번째 것은 이미하고있는 것이고 두 번째 것은 idProject를 프로젝트가 아닌 정수로 만들고 싶기 때문에 이번에는 유효하지 않습니다. – Aldeguer

+0

'id_project'를 정수로 사용하려면 스스로 설정해야합니다. 프레임 워크에 의해 값을 자동으로 설정하는 것은 양방향 매핑을 수행 할 때만 작동하기 때문에 (이미 수행하고 있습니다.) – Garima