0

Есть сущность категории и сущность язык. У категории может быть несколько языков. Как реализовать таким образом, чтобы у категории было только определенное количество id, но много вариантов category_name. Какое отношение будет правильно применить? Может нужно добавить дополнительное поле в связующую таблицу и как это сделать?

@Entity
@Table(name = "category")
@AllArgsConstructor
@Data
public class Category {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name = "id", updatable = false, nullable = false)
   private Long id;

   @ManyToMany
   private List<Language> languages;

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

@Entity
@Table(name = "t_language")
@AllArgsConstructor
@Data
public class Language {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

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

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

    @ManyToMany
    private List<Category> categories;
}
  • прочитал раз 10 что нужно - не понял – Tsyklop Jun 20 '19 at 09:44
  • Представьте, что у вас есть категория. И у нее есть поле name. Так же эта категория может быть на пяти языках. Как лучше сделать, чтобы избежать отдельной записи в таблице с категориями на каждый язык. Чтобы у одной записи категории было пять name на разных языках. Я думаю, что поможет только отдельная таблица с id категории, id языка и name категории. – Pavel Rodionov Jun 20 '19 at 11:36
  • @PavelRodionov смогли найти ответ? – Antonio112009 Jun 21 '19 at 15:20
  • Пока сделал дополнительную сущность с ссылкой на категорию и с ссылкой на язык + поле с name категории. – Pavel Rodionov Jun 27 '19 at 08:54

1 Answers1

0

Другие примеры аннотации можно найти тут

Про один из вариантов реализации кастомного ID я рассказываю тут

Ваш вариант можно реализовать с @OneToMany анотацией (unidirectional).
Почему Unidirectional Зачем от второй таблички запрашивать первую, когда можно просто в одну сторону?

Идея такова:

Category.java:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = &quot;category_generator&quot;)
@SequenceGenerator(name=&quot;category_generator&quot;, sequenceName = &quot;category_seq&quot;, allocationSize = 1)

private Long id;

@Column private String name;

@OneToMany( cascade = CascadeType.ALL, orphanRemoval = true ) private List<Language> languages = new ArrayList<>();

public void addLanguage(Language language) { languages.add(language); }

public void removeLanguage(Language language) { languages.remove(language); } }

Language.java

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "t_language")
public class Language {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = &quot;language_generator&quot;)
@SequenceGenerator(name=&quot;language_generator&quot;, sequenceName = &quot;t_language_seq&quot;, allocationSize = 1)
private Long id;

@Column
private String mnemo;

@Column
private String name;

}