Как сохранить несколько одинаковых объектов в моем списке с помощью Hibernate?

#spring #hibernate #jpa

#spring #спящий режим #jpa

Вопрос:

У меня есть следующая программа entity:

 @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "program_action",
        joinColumns = @JoinColumn(name = "program_id"),
        inverseJoinColumns = @JoinColumn(name = "action_id"))
private List<Action> actions;
  

и «Действия», которые могут быть продублированы в списке.
Я хочу сохранить этот список в базе данных, но получаю исключение:
Дублирующая запись » для ключа ‘UK_nudt643x8s4vnku9adpd2hujp’

пример таблицы «program_action»:
1 _ 2
1 _ 1
1 _ 2

 public class Action {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;

@Column(name = "time")
private int time; //in seconds

@Column(name = "title")
private String title;

@Column(name = "description", nullable = false, columnDefinition = "TEXT")
private String description;
  

}

 @Service
public void save(Program program) throws Exception {
    repository.save(program);
}

@Controller
@PostMapping
public String save(@Valid @ModelAttribute("program") Program program, BindingResult bindingResult, Model model){
    try {
        log.info("Save - ok!");
        service.save(program);
    } catch (Exception e){
        log.info("Save failed. Message: "  e.getMessage());
    }
    return "redirect:/program/all";
}
  

Я понимаю, что есть ключ, мешающий мне сделать это, но я не нахожу, как это исправить с помощью Hibernate.

Я надеюсь, что кто-нибудь сможет мне помочь, спасибо.

Комментарии:

1. не могли бы вы, пожалуйста, добавить код, в котором вы пытаетесь сохранить этот список в базе данных?

2. не могли бы вы предоставить Action код объекта?

3. Конечно! Я отредактировал свой пост.

Ответ №1:

Итак, я решил эту проблему.

Во-первых, @OneToMany не требует @JoinTable
Во-вторых, я отказался от базы данных автоматической генерации и построил схемы с Flyway.