Почему @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);

Ответы (0 шт):