Top.Mail.Ru
Ответы

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 раза, на второй вам выдается ошибка дублирования ключа. Исправьте таблицу связку и ошибки не будет.

Аватар пользователя
Искусственный Интеллект

настройте свой хибернет чтоб вам показывало что именно за запрос делается...