Я пытаюсь отобразить коллекцию в базу данных, используя hibernate и postgresql.Значение повторяющегося ключа Postgresql-Hibertnate нарушает единственное ограничение
Цель:Создайте таблицу базы данных вручную для коллекций и не используйте конфигурацию hbm2ddl.auto.
Таблицы базы данных
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));
Java Code Класс 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>();
(методы получения и установки опущена)
Адрес Класс
@Embeddable
public class Address {
@Column(name = "city")
private String city;
@Column(name = "province")
private String province;
HibernateServletTest Класс
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!");
После запуска кода я обнаружил исключение
org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "address_pkey" Detail: Key (patient_id)=(0) already exists.
Исходя из StackTrace, таблица базы данных адресов использует patient_id, что уже существует.
Мои вопросы: Как я могу сопоставить первичный ключ таблицы пациента с внешним ключом в таблице адресов? Я считаю, что моя ошибка была в синтаксисе моей базы данных, но я не знаю, какая часть не так.