Почему @ManytoOne не работает, как manytoone?
Есть две сущности им соответствует две таблицы "Notes" и "Tags". Одному tags, может принадлежать много notes. Сделал связь "многие к одному"
@Entity
public class Notes {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@Lob
private String note;
@ManyToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "tagid", nullable = false)
public Tags tags;
Добавляю запись в notes
public class Main {
public static void main(String[] args) {
Tags tags = new Tags();
tags.setTag("Java");
Notes notes = new Notes();
notes.setName("My note");
notes.setNote("Hello World");
notes.setTags(tags);
Получаем запись в таблицу notes
1 | My note | Hello world | 1
В таблице tags
1 | Java
Затем повторяем вставку и получаем в notes
1 | My note | Hello world | 1
2 | My note | Hello world | 2
А в tags
1 | Java
2 | Java
Вопрос, где тут многие к одному? Почему у меня "Java" дублируется? ведь в таблице notes должен быть в последней колонке в обоих строках 1, а в таблице Tags всегда оставаться только одна строка с "Java" - ведь в этом весь смысл связи многие к одному! Мне товарищ по python подсказал, что они при создании новой записи добавляют код "Existing or create" - вроде как "не создавай "Java" если она уже есть" Как в JPA это реализуется?
Моя проблема так решается или есть более оптимальный способ?
Tags tags = entityManager.createQuery("from Tags t where t.tag = :tag", Tags.class)
.setParameter("tag", "Java")
.getSingleResult();
Notes notes = new Notes();
notes.setName("test name7");
notes.setNote("Hello Mick");
notes.setTags(tags);
entityManager.persist(notes);