Org.hibernate.exception.ConstraintViolationException: could not execute statement
Мой код:
public class Main {
public static void main(String[] args) {
StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure("hibernate.cfg.xml").build();
Metadata metadata = new MetadataSources(registry).getMetadataBuilder().build();
SessionFactory sessionFactory = metadata.getSessionFactoryBuilder().build();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
String sP = "from " + Purchase.class.getSimpleName();
String sS = "from " + Student.class.getSimpleName();
String sC = "from " + Course.class.getSimpleName();
List<Purchase> purchaseList = session.createQuery(sP).getResultList();
List<Student> studentList = session.createQuery(sS).getResultList();
List<Course> coursesList = session.createQuery(sC).getResultList();
try {
for (Purchase purchase : purchaseList) {
for (Student student : studentList) {
for (Course course : coursesList) {
if (purchase.getStudentName().equals(student.getName()) && purchase.getCourseName().equals(course.getName())) {
Key id = new Key();
id.setStudentId(student.getId());
id.setCourseId(course.getId());
LinkedPurchase linkedPurchase = new LinkedPurchase(id);
session.save (linkedPurchase);
session.flush();
transaction.commit();
}
}
}
}
} catch (Exception e){
e.printStackTrace();
}
sessionFactory.close();
}
}
Выдает ошибки:
javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement
Caused by: org.hibernate.exception.ConstraintViolationException: could not execute statement
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1-2' for key 'linkedpurchaselist.PRIMARY'
Остальные классы написаны верно, это уже точно. Что нужно исправить с сессиями и транзакциями? (программа берет информацию из двух таблиц и записывает в третью)
В коде похоже ничего
Вы в таблице linkedpurchaselist похоже сделали pk уникальным, хотя эта таблица связка и каждый студент может быть на нескольких курсах. Вы пытаетесь добавить одного и того же студента в эту таблицу 2 раза, на второй вам выдается ошибка дублирования ключа. Исправьте таблицу связку и ошибки не будет.
настройте свой хибернет чтоб вам показывало что именно за запрос делается...