Задать вопрос
@Jackson750

Я правильно замапил связи между таблицами, hibernate?

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode

public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private Short age;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    private Set<Article> articles = new HashSet<>();

}

@Entity
@Data
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "article")
public class Article{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String text;

    @Enumerated(EnumType.STRING)
    @Column(name = "color")
    private Color color;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "user_id")
    private User user;
}


Нужно замапить связь один ко многим User имеет много Article. Правильно ли все зделано?
  • Вопрос задан
  • 321 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
mad_maximus
@mad_maximus
Двухсторонние связи лучше не использовать, а так да, правильно.
Ответ написан
@relzet
Связи в Entity правильно, двусторонние связи не надо использовать на уровне таблиц и foreign key делать только на стороне дочерней таблицы, как `user_id` в `article` в даном случае.
Еще желательно добавить в User:
- orphanRemoval = true в @OneToMany
- методы `addArticle` и `removeArticle`
public void addArticle(Article article) {
        articles.add(article);
        articles.setUser(this);
    }
 
public void removeArticle(Article article) {
        articles.remove(article);
        articles.setUser(null);
    }

https://vladmihalcea.com/the-best-way-to-map-a-one...

по ломбоку: @EqualsAndHashCode можно убрать, он уже есть в @Data
https://projectlombok.org/features/Data
Ответ написан
@sviato_slav
Сделано немного неправильно.
@ManyToOne(cascade = CascadeType.ALL)

Некорректно использовать cascade = CascadeType.ALL. на @ManyToOne.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы