0

休止状態のエンティティで「1 対 1」のマッピングを実行しようとしています。student テーブルには、外部キー参照として contact_info があります。学生オブジェクトを保存すると、外部キーが NULL に設定されます。

ここにソースを添付しました。問題を教えてください...

テーブル :

DROP TABLE IF EXISTS cont_info;
CREATE TABLE cont_info(
ID INT PRIMARY KEY AUTO_INCREMENT,
MOBILE_NO VARCHAR(40),
EMAIL_ID VARCHAR(40)
);

DROP TABLE IF EXISTS student;
CREATE TABLE student(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(40),
CONTACT_INFO INT,
KEY `CONTACT_INFO` (`CONTACT_INFO`),
CONSTRAINT `fk_student_contact_info` FOREIGN KEY (`CONTACT_INFO`) REFERENCES `cont_info` (`ID`) 
);

エンティティ :

ContactInfo.java

import java.io.Serializable;

public class ContactInfo implements Serializable {

    private int id;
    private String mobileNo;
    private String emailId;
    private Student student;

    public Student getStudent() {
        return student;
    }
    public void setStudent(Student student) {
        this.student = student;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getMobileNo() {
        return mobileNo;
    }
    public void setMobileNo(String mobileNo) {
        this.mobileNo = mobileNo;
    }
    public String getEmailId() {
        return emailId;
    }
    public void setEmailId(String emailId) {
        this.emailId = emailId;
    }

}

Student.java :

import java.io.Serializable;

public class Student implements Serializable {
    private int id;
    private String name;
    private ContactInfo contactInfo;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public ContactInfo getContactInfo() {
        return contactInfo;
    }
    public void setContactInfo(ContactInfo contactInfo) {
        this.contactInfo = contactInfo;
    }
}

HBM :

<class name="com.tutorial.hibernate.ContactInfo" table="cont_info">
    <id column="id" name="id">
        <generator class="identity" />          
    </id>
    <one-to-one name="student" class="com.tutorial.hibernate.Student" cascade="save-update"></one-to-one>
    <property name="mobileNo" column="MOBILE_NO" />
    <property name="emailId" column="EMAIL_ID" />   
</class>

<class name="com.tutorial.hibernate.Student" table="student">
    <id name="id" column="id">          
        <generator class="foreign">
            <param name="property">contactInfo</param>
        </generator>
    </id>
    <one-to-one name="contactInfo" class="com.tutorial.hibernate.ContactInfo" constrained="true"></one-to-one>
    <property name="name" column="NAME" />      
</class>

エンティティを保存する Java コード:

Session session = HibernateUtil.getSession();
Transaction txn = session.beginTransaction();

ContactInfo contactInfo = new ContactInfo();
contactInfo.setMobileNo("9876543212");
contactInfo.setEmailId("test@gmail.com");

Student student = new Student();
student.setName("Student1");
contactInfo.setStudent(student);

student.setContactInfo(contactInfo);
session.save(student);

txn.commit();
session.close();

上記の行を実行すると、次のようなSQLが表示されます。

Hibernate: insert into cont_info (MOBILE_NO, EMAIL_ID) values (?, ?)
Hibernate: insert into student (NAME, id) values (?, ?)

しかし、実際には表が示しています。

連絡先情報 ここに画像の説明を入力

4

1 に答える 1

0

これにより、コードのファイルのマッピングに問題が発生しています

generator class="foreign"

このマッピングファイルをマッピングファイルと同じように使用してみてstudentくださいcontact_info

<id column="id" name="id">
        <generator class="identity" />          
    </id>

学生マッピングファイルの編集には、列名を記載する必要があります

<one-to-one name="contactInfo" class="com.tutorial.hibernate.ContactInfo" constrained="true" column="CONTACT_INFO"></one-to-one>
于 2013-03-04T07:11:43.663 に答える