#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.