Как модель Hibernate Generator разветвляет внешние ключи? - PullRequest
0 голосов
/ 11 октября 2019

Наша база данных PostgreSQL насчитывает более 200 таблиц, и мы хотели попробовать "Обратный инжиниринг" Hibernate, чтобы избежать написания всех VO и / или классов сущностей вручную .

Однако у нас есть несколько необычных внешних ключей в нашей базе данных, и я хотел понять, как Hibernate моделирует, прежде чем прыгать в неизвестность. Вот пример, который показывает «разветвленный внешний ключ» (преувеличенный для воздействия), который, я думаю, хорошо подходит для описания случая, с которым мы сталкиваемся:

create table person (
  id int primary key not null,
  sid int not null unique,
  name varchar(30)
);

insert into person (id, sid, name) values
  (1, 3, 'Victor'),
  (2, 4, 'Juliett'),
  (3, 5, 'Oscar'),
  (4, 1, 'Romeo'),
  (5, 2, 'Mike');

create table applicant (
  id int primary key not null,
  sid int not null unique,
  referrer_id int not null, -- THIS IS THE FORKING FOREIGN KEY!
  foreign key (referrer_id) references applicant (id), -- fk #1
  foreign key (referrer_id) references applicant (sid), -- fk #2
  foreign key (referrer_id) references person (id), -- fk #3
  foreign key (referrer_id) references person (sid), -- fk #4
  friend_id int not null,
  foreign key (friend_id) references applicant (id) -- fk #5
);

insert into applicant (id, sid, referrer_id, friend_id) values
  (1, 2, 3, 5),
  (2, 5, 1, 3),  
  (3, 4, 5, 2),
  (4, 1, 1, 4),
  (5, 3, 2, 3);

Поскольку referrer_id в таблице applicant указывает на четыре разных места ... как Hibernate моделирует этот разветвление FK, в то время как реверс-инжиниринг его?

Будет ли он создавать четыре отдельных свойства, по одному для каждого родителя? Или, может быть, четыре отдельных метода, по одному для каждого родителя?

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Для обратного инжиниринга из реляционной базы данных, такой как PostgreSQL, вы можете попробовать Telosys (http://www.telosys.org/). Telosys - это легкий генератор кода, работающий с двумя типами моделей, в частности (в вашем случае) «моделью базы данных», которую можно создавать и обновлять из схемы базы данных (обратный инжиниринг основан на метаданных JDBC). См. http://www.telosys.org/models.html

Как только модель создана (или обновлена), вы можете использовать шаблоны для генерации своего кода (это очень эффективно для стандартного кода, такого как сущности, DAO и т. Д.). Шаблоны полностью настраиваемы, так что вы можете адаптировать существующие шаблоны или создать свой собственный шаблон для генерации именно того, что вы хотите (см. http://www.telosys.org/templates.html)

Для получения дополнительной информации вы можете посмотреть на этоpost: https://modeling -languages.com / telosys-tools-the-concept-of-легкий концепт-модель для генерации кода /

0 голосов
/ 12 октября 2019

После поиска мы пришли к выводу, что обратное проектирование в Hibernate далеко от автоматизированного процесса. Пожалуйста, поправьте меня, если я ошибаюсь. Он не может быть автоматизирован и поэтому является полуавтоматическим процессом, который требует много взаимодействия с пользователем, каждый раз . Это происходит из-за того, что конфигурация Hibernate является довольно неполной, что препятствует ее автоматизации.

Если это так, то Hibernate нам не нужен, поскольку база данных продолжает развиваться, и нам нужно часто обновляйте наш Java-код, что может привести к [большой] человеческой ошибке.

Мне бы очень хотелось, чтобы мне противоречили. Это позволило бы нам использовать Hibernate. Пожалуйста, сделайте.

...