Создание сущности для базы данных - PullRequest
0 голосов
/ 03 апреля 2020

Например, у меня есть база данных с таблицей книг (id, title, themeId, authorId), автором таблицы (id, name) и темой таблицы (id, name). Я не знаю, должен ли я создать сущность точно так же, как в базе данных (и тогда у меня будут проблемы с запросами на соединение):

class Book {
    private id;
    String title;
    int bookThemeId;
    int bookAuthorId;
}

или создать что-то вроде этого:

class Book {
    private id;
    String title;
    BookTheme bookTheme;
    Author bookAuthor;
}

в секунду В случае, если у меня возникнут проблемы, если authorId или themeId равен нулю (может быть), и проблемы с получением из DAO в целом, если я хочу получить только список книг (проблемы - поля пустые и очень громоздкий компоновщик для сущности Book).

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Я думаю, вы должны go со вторым подходом. Не будет проблемы, если ваш Автор BookTheme r будет нулевым, если вы используете optional=true. Для громоздкого строителя вы можете использовать fetchtype as lazy.

@Entity
@Table(name = "Book")
public class Book {

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

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional=true)
    @JoinColumn(name = "theme_id", referencedColumnName = "id")
    private BookTheme bookTheme;

    // ... getters and setters
}

Надеюсь, это сработает!

1 голос
/ 03 апреля 2020

Я бы go со вторым вариантом, потому что это более объектно-ориентированный. Если у вас go с первым вариантом, вам нужно будет сделать второй запрос, чтобы получить подробности.

@Entity
@Table(name = "books")
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
    //... 

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "theme_id", referencedColumnName = "id")
    private BookTheme bookTheme;

    // ... getters and setters
}

Ваш идентификатор будет нулевым, когда поля не будут созданы, верно? Например, когда он сохраняется в базе данных, он всегда будет иметь идентификатор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...