@AstronautX

JPA. Как реализовать связь между заголовком и таблицей документа?

Необходимо реализовать связь между заголовком документа и таблицей документа.
Я создал две сущности документ и строку документа и настроил соотв. связи. Меня интересует корректна ли архитектура? Или существует некий стандартный вариант реализации данного решения.

@Entity
@Table
public class Document extends BaseEntity {
@Column
@Temporal(TemporalType.DATE) 
private Date date;
@Column
@Temporal(TemporalType.DATE) 
private Date createDate;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<DocumentRow> rows;

...
}

public class DocumentRow extends BaseEntity {
@ManyToOne(optional = false, cascade = CascadeType.ALL)
 private Document document;
@Column(nullable = false, unique = true)
private Integer row;

...
}
  • Вопрос задан
  • 316 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vayho
Несколько пояснений и советов:
1. У сущности DocumentRow нет аннотаций @Entity и @Table
2. Указывайте явно название таблицы @Table(name = "documents"), @Table(name = "document_rows").
3. Указывайте явно название колонок @Column(name = "date") и т.д. иначе однажды переименуете поле в классе или столбец в БД и хибернейт не сможет связать данные(или еще хуже добавит новый столбец самостоятельно).
4. @ManyToMany изменить на @OneToMany. Да и вообще это знания из теории реляционных баз данных и перед работой с ними лучше ознакомиться, потому что непонимание типов связей не даст нормально спроектировать БД.
5. Уберите cascade если явно не нужен, он замедляет хибернейт.
6. Явно для связей указывайте fetch = FetchType.LAZY. Пытайтесь не использовать EAGER вообще.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы