簡體   English   中英

休眠-以一對多關系插入數據

[英]Hibernate - insert data with one to many relationship

我正在嘗試將數據插入到Patient表中,該表與Site具有多對一關系。 SitePatient一對多關系。

但是,我得到了org.postgresql.util.PSQLException: ERROR: insert or update on table "patients" violates foreign key constraint "fk_427e3ubwhw8n7a4id3mmrmjgj" Detail: Key (patient_id)=(31) is not present in table "sites".

我試圖創建一組患者,將我的患者添加到該組中,創建一個站點對象,然后使用該對象設置患者。 我不確定這是哪一部分出錯了。

    Session session = this.getFactory().openSession();
    Transaction transaction = null;

    try{
        transaction = session.beginTransaction();

        Date parsedDob = Date.valueOf(dob);
        Date parsedDateReg = Date.valueOf(dateReg);

        Site site = new Site();
        site.setSiteId(1);

        IPatient p = new Patient();
        p.setFirstName(firstName);
        p.setLastName(lastName);
        p.setDob(parsedDob);
        p.setDateRegistered(parsedDateReg);
        p.setSite(site);

        Set<IPatient> patientSet = new HashSet<IPatient>();
        patientSet.add(p);

        site.setPatients(patientSet);

        session.save(site);
        session.save(p);
        transaction.commit();
    }catch(Exception e){
        e.printStackTrace();
    }

我的Patient.hbm.xml文件是:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example.model">
<class name="Patient" table="patients">
    <id name="patientId" column="patient_id">
        <generator class="sequence" />
    </id>
    <version name="version" column="version" />
    <property name="firstName" column="first_name" />
    <property name="lastName" column="last_name" />
    <property name="dob" column="dob" />
    <property name="gender" column="gender" />
    <property name="dateRegistered" column="date_registered" />
      <many-to-one name="site" class="com.example.model.Site" not-null="true" />
    <set name="visits" cascade="all">
        <key column="visit_id" />
        <one-to-many class="Visit" />
    </set>
</class>

我的Site.hmx.xml是:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example.model">
<class name="Site" table="sites">
    <id name="siteId" column="site_id">
        <generator class="sequence" />
    </id>
    <version name="version" column="version" />
    <property name="name" column="name" />
    <set name="patients" cascade="all">
        <key column="patient_id" />
        <one-to-many class="Patient" />
    </set>
</class>

我的Patient.java

public class Patient implements IPatient{

    private Integer version;
    private Integer patientId;
    private Set<IVisit> visits;
    private Site site;

    private String firstName;
    private String lastName;
    private Date dob;
    private Gender gender;
    private Date dateRegistered;

    public Patient(){

    }
}

我的Site.java

public class Site {

    private Integer siteId;
    private Integer version;
    private Set<IPatient> patients;
    private String name;

    public Site(){

    }
}

在下面的行之后,您應該將站點對象保存到db;

 site.setSiteId(1);
 session.save(site);

之后,您可以將站點對象設置為耐心;

 p.setSite(site);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM