최대 절전 모드에서 두 테이블 간의 단방향 기본 키 관계를 하나씩 만들려고합니다. 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에서 만든
테이블입니다. 실수는 무엇입니까? 누군가 설명해 주시겠습니까?
테이블이 .hbm.xml을 뒤져에서 수행 매핑을 기반으로 생성을을 변경하지 않으 문제는 데이터베이스 구조입니다 명시 적으로 변경 쿼리 또는 create.Can을 실행하여 학생 테이블의 구조는 데이터가 삽입 될 수 있도록 XML 매핑을 통해 변경 될 수 있습니까? –
두 테이블 모두 realtionship 열이 없습니다. 학생 테이블에는 사물함 ID가 포함되어야하며 사물함 테이블에는 학생 ID가 포함되어야합니다. 두 테이블을 서로 관계없이 어떻게 연관시킬 수 있습니까? – Hansraj
Student POJO에는 락커가 있고 student.hbm.xml에는 사물함이 하나의 관계로 매핑되어 있습니다. 매핑에 추가해야하는 항목이 없습니다. 너에게 알려주 시겠니? –