В моем проекте администратор (Пользователь) может настроить получение запланированных писем о любом пользователем, которого он выбирает.Объекты JPA, генерирующие неправильный дизайн базы данных
мне нужно иметь базу данных следующей конструкции:
TABLE User (
UserId INT PRIMARY KEY AUTO_INCREMENT,
Email VARCHAR,
FirstName VARCHAR,
LastName VARCHAR
IsAdmin BOOL,
...
)
TABLE Email_Schedule (
ScheduleId INT PRIMARY KEY AUTO_INCREMENT, /* this is not necessary */
AdminId INT, /* could be replaced by a composite foreign primary keys */
UserId INT,
FOREIGN KEY (AdminId) REFERENCES User (UserId),
FOREIGN KEY (UserId) REFERENCES User (UserId)
)
Следующий код в моих Java классов для JPA лица:
@Entity
public class Email_Schedule {
@Id
private int scheduleId;
@ManyToOne(targetEntity = User.class)
private List<User> admins = new LinkedList<>();
@ManyToOne(targetEntity = User.class)
private List<User> users = new LinkedList<>();
public Email_Schedule() {
super();
}
public Email_Schedule(User admin, User user) {
super();
this.admins.add(admin);
this.users.add(user);
}
// setters and getters...
формирует базу данных по следующей схеме:
TABLE USER (
...
)
TABLE SCHEDULE (
ScheduleId INT PRIMARY KEY AUTO_INCREMENT
)
TABLE Email_Schedule (
ScheduleId INT,
Users INT,
Admins INT,
FOREIGN KEY (ScheduleId) REFERENCES SCHEDULE(ScheduleId),
FOREIGN KEY (Users) REFERENCES USER (UserId),
FOREIGN KEY (Admins) REFERENCES USER (UserId)
)
Мой вопрос, почему он создал бесполезный стол для ScheduleId
и ссылается на нее из другой таблицы вместо того, чтобы просто использовать ее непосредственно в таблице Email_Schedule
?
Проблема, похоже, связана с ScheduleId
.. Я попытался не использовать ее, создав IdClass
, но у меня были разные ошибки и неправильные конструкции баз данных.
Какой инструмент вы использовали для DDL поколения? –
@DraganBozanovic Eclipse, инструмент JPA, генерирует таблицы из объектов. Затем я проверил сгенерированные таблицы в workbench MySQL. –
Не могли бы вы попытаться использовать hbm2ddl напрямую? –