java - Hibernate - 插入具有一对多关系的数据

标签 java hibernate postgresql

我正在尝试将数据插入到 Patient 表中,该表与 Site 具有多对一关系。 SitePatient 具有一对多关系。

但是,我收到org.postgresql.util.PSQLException:错误:表“患者”上的插入或更新违反了外键约束“fk_427e3ubwhw8n7a4id3mmrmjgj” 详细信息:键 (patent_id)=(31) 不存在于表“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>

我的病人.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(){

    }
}

我的网站.java

public class Site {

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

    public Site(){

    }
}

最佳答案

在下面的行之后,您应该将站点对象保存到数据库;

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

之后您可以将站点对象设置为患者;

 p.setSite(site);

关于java - Hibernate - 插入具有一对多关系的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28664805/

相关文章:

java - 将 List<Map<String, Object>> 转换为 List<String>

Java 静态方法中的泛型定义

java - 如何正确地将表单绑定(bind)到@ManyToOne结构并保存到数据库。 Spring MVC、 hibernate

c# - PostgreSQL 是否可以通过某些 IF 条件使用 WHERE?

java - 特殊字符的常量?

java - 抓取 Cloudflare 站点

java - Hibernate JOIN [some entity] ON unexpected token

mysql - 我想向客户销售固定数量的产品。 spring jpa如何管理并发?

sql - PostgreSQL:如何替换同一字段中的不同值?

regex - 匹配法语字符