2014-09-27 3 views
1

최대 절전 모드에서 두 테이블 간의 단방향 기본 키 관계를 하나씩 만들려고합니다. XML maaping을 사용하고 있습니다. 다음은 Java Java POJO 클래스와 각각의 .hbm 파일입니다.최대 절전 모드 일대일 기본 키 XML 매핑

학생 POJO 클래스

public class Student { 

    private Long studentId; 
    private String name; 
    private Locker locker; 

    public Long getStudentId() { 
     return studentId; 
    } 
    public void setStudentId(Long studentId) { 
     this.studentId = studentId; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public Locker getLocker() { 
     return locker; 
    } 
    public void setLocker(Locker locker) { 
     this.locker = locker; 
    } 
} 

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
    <class name="com.avinash.dto.Student" table="STUDENT"> 
     <id name="studentId" type="long" column="STUDENT_ID"> 
      <generator class="native"></generator> 
     </id> 

     <property name="name" type="string"> 
      <column name="NAME"></column> 
     </property> 

     <one-to-one name="locker" class="com.avinash.dto.Locker" cascade="all" constrained="true"> 
     </one-to-one> 

    </class> 
</hibernate-mapping> 

로커 POJO 클래스

public class Locker { 
    private Long lockerId; 
    private String location; 
    ... 
} 

Locker.hbm.xml

<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping> 
    <class name="com.avinash.dto.Locker" table="LOCKER"> 
    <id name="lockerId" type="long" column="LOCKER_ID"> 
     <generator class="native"></generator> 
    </id> 
    <property name="location" type="string"> 
     <column name="LOCATION"></column> 
    </property> 
    </class> 
</hibernate-mapping> 

다음은 학생과 사물함 객체를 저장하는 주요 클래스입니다.

공용 클래스 OneToOneUnidirectionalPK {위의 자바 프로그램은 내가 다음과 같은 오류가 실행

public static void main(String[] args) { 

    Session session = HibernateUtil.getSessionfactory().openSession(); 
    session.beginTransaction(); 

    Locker locker = new Locker(); 
    locker.setLocation("320, Building 1, First Floor"); 

    Student student = new Student(); 
    student.setName("Avinash"); 
    student.setLocker(locker); 

    Serializable id = session.save(student); 
    System.out.println("The id is " + id); 
    session.getTransaction().commit(); 
    session.close(); 
    HibernateUtil.shutdown(); 
} 

. org.postgresql.util.PSQLException :

에 의한 오류 : 삽입 또는 테이블 "학생"에 대한 업데이트는 "fk_fcwupt4ogu22gfes87gv8ctp4" 상세 외래 키 제약 조건을 위반 : 키 (student_id) = (1) 테이블에 존재하지 않는 "사물함 ". 데이터가 여기에 삽입되지 않는 이유는

CREATE TABLE student 
(
    student_id bigint NOT NULL, 
    name character varying(255), 
    CONSTRAINT student_pkey PRIMARY KEY (student_id), 
    CONSTRAINT fk_fcwupt4ogu22gfes87gv8ctp4 FOREIGN KEY (student_id) 
     REFERENCES locker (locker_id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 

CREATE TABLE locker 
(
    locker_id bigint NOT NULL, 
    location character varying(255), 
    CONSTRAINT locker_pkey PRIMARY KEY (locker_id) 
) 

을 다음과 같이 포스트그레스 SQL에서 만든

테이블입니다. 실수는 무엇입니까? 누군가 설명해 주시겠습니까?

답변

0

매핑이 정확하다고 생각합니다.

아래와 같이 DB를 변경하고 시도하십시오 :

CREATE TABLE student 
(
    student_id bigint NOT NULL, 
    name character varying(255), 
    **locker bigint NOT NULL,** 
    CONSTRAINT student_pkey PRIMARY KEY (student_id), 
    CONSTRAINT fk_fcwupt4ogu22gfes87gv8ctp4 FOREIGN KEY **(locker)** 
    REFERENCES locker (locker_id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION 
) 
+0

테이블이 .hbm.xml을 뒤져에서 수행 매핑을 기반으로 생성을을 변경하지 않으 문제는 데이터베이스 구조입니다 명시 적으로 변경 쿼리 또는 create.Can을 실행하여 학생 테이블의 구조는 데이터가 삽입 될 수 있도록 XML 매핑을 통해 변경 될 수 있습니까? –

+0

두 테이블 모두 realtionship 열이 없습니다. 학생 테이블에는 사물함 ID가 포함되어야하며 사물함 테이블에는 학생 ID가 포함되어야합니다. 두 테이블을 서로 관계없이 어떻게 연관시킬 수 있습니까? – Hansraj

+0

Student POJO에는 락커가 있고 student.hbm.xml에는 사물함이 하나의 관계로 매핑되어 있습니다. 매핑에 추가해야하는 항목이 없습니다. 너에게 알려주 시겠니? –