J'essaye de mapper une collection dans une base de données en utilisant hibernate et postgresql.Postgresql-Hibertnate valeur de clé en double viole contrainte unique
Objectif:Créez la table de base de données manuellement pour les collections et n'utilisez pas la configuration hbm2ddl.auto.
Tables de base de données
CREATE TABLE patients(
patient_id BIGSERIAL NOT NULL,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
PRIMARY KEY(patient_id));
CREATE TABLE address (
patient_id BIGINT NOT NULL,
city VARCHAR(255),
province VARCHAR(255),
PRIMARY KEY(patient_id),
CONSTRAINT testcollection FOREIGN KEY(patient_id) REFERENCES patients(patient_id));
code Java Classe patient
@Entity
@Table(name = "patients")
public class Patient {
@Id
@GenericGenerator(name = "primaryIncrement", strategy = "increment")
@GeneratedValue(generator = "primaryIncrement")
@Column(name = "patient_id")
private long patientID;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ElementCollection
@JoinTable(name="address", [email protected](name = "patient_id"))
private Collection<Address> listOfAddresses = new ArrayList<Address>();
(getter et setter omis)
Adresse classe
@Embeddable
public class Address {
@Column(name = "city")
private String city;
@Column(name = "province")
private String province;
HibernateServletTest Classe
Configuration config = new Configuration();
config.configure("hibernate.cfg.xml");
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.getTransaction();
transaction.begin();
Patient patient = new Patient();
Address address = new Address();
Address homeAddress = new Address();
patient.setFirstName("Ron");
patient.setLastName("Weasly");
address.setCity("Diagon Alley");
address.setProvince("london");
homeAddress.setCity("Abbey Road");
homeAddress.setProvince("Chelsea");
patient.getListOfAddresses().add(address);
patient.getListOfAddresses().add(homeAddress);
session.save(patient);
transaction.commit();
session.close();
System.out.println("Successfully Saved!");
Lors de l'exécution du code I a rencontré une exception
org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "address_pkey" Detail: Key (patient_id)=(0) already exists.
Sur la base de la stacktrace, la table de base de données d'adresses utilise un patient_id qui existe déjà.
Mes questions sont, comment puis-je mapper la clé primaire de la table du patient à la clé étrangère dans la table d'adresses? Je crois que mon erreur était dans la syntaxe de ma base de données, mais je ne sais pas quelle partie est erronée.