Перекрывающиеся отношения представлены пружиной JPA - PullRequest
0 голосов
/ 05 июня 2019

В качестве первой практики я создаю бэкэнд веб-страницы с нуля, используя Spring boot, JPA и базу данных Oracle.Внутри моей базы данных есть таблица User, содержащая некоторую информацию.И есть еще три таблицы: Рабочий, Клиент и Администратор.Пользователь может иметь несколько ролей, например, Пользователь может быть как Рабочим, так и Администратором.(Я думаю, что это перекрывающиеся отношения, как указано на диаграмме EER, исправьте меня, если я ошибаюсь) Теперь я хочу реализовать это отношение с использованием JPA при загрузке Spring, но я не знаю, как именно я должен проектировать бины.Может ли кто-нибудь дать мне подсказку или подобный пример?

Если весенняя JPA не является хорошим способом реализации такого рода отношений, или если это слишком сложно для меня понять. Есть ли лучший способ реструктурировать мою таблицу базы данных?

Я изучил наследование JPA, например, это сообщение Хранилище данных Spring с Inheritance.JOINED но я не сделалмне не удается заставить мой код работать, так как я не совсем понимаю механизм, стоящий за

Вот пример таблиц моей базы данных:

User(Id, username, password, ...)
Worker(Id, user_id, salary, ...)
Admin(Id, user_id, team_name, ...)
Customer(Id, user_id, account_balance, ...)

ps: как указано в требовании к домашней работеЯ не предполагаю использовать первичный ключ или внешний ключ в базе данных, поскольку JPA может обрабатывать отношения.

1 Ответ

0 голосов
/ 05 июня 2019

user-> worker является отношением один-один, поскольку пользователь может быть только одним работником.То же самое относится к пользователю-> администратору и пользователю-> клиенту.Вы можете найти код макета, как показано ниже.

@Entity
@Table(name = "users")
public class User {

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

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private Worker worker;


@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private Admin admin;

// ... getters and setters
}


@Entity
@Table(name = "worker")
public class Worker {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
//... 
@OneToOne (mappedBy = "worker")
private User user;

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