0

I am trying to insert data into a Patient table, which has a many-to-one relationship with Site. Site has a one-to-many relationship with Patient.

However, I get a 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".

I have tried to create a set of patients, add my patient to this set, create a site object, then use this object to set the patients. I am not sure which part of this is going wrong.

 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(); } 

My Patient.hbm.xml file is:

<?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> 

My Site.hmx.xml is:

<?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> 

My 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(){ } } 

My Site.java

public class Site { private Integer siteId; private Integer version; private Set<IPatient> patients; private String name; public Site(){ } } 

1 Answer 1

1

After the line below you should save your site object to db;

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

After that you can set site object to patient;

 p.setSite(site); 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.