【问题标题】:How does the Hibernate Generator model forking foreign keys?Hibernate Generator 是如何模拟分叉外键的?
【发布时间】:2020-02-09 03:46:46
【问题描述】:

我们的 PostgreSQL 数据库有 200 多个表,我们想尝试一下 Hibernate 的“逆向工程”,以避免手动编写所有 VO 和/或实体类。。 p>

但是,我们的数据库中有一些古怪的外键,我想在进入未知领域之前了解 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);

自从applicant 表中的referrer_id 指向 到四个不同的地方...... Hibernate 如何在逆向工程的同时模拟这个分叉 FK?

它会产生四个独立的属性,每个父级一次吗?或者可能是四种不同的方法,每个父母一种?

【问题讨论】:

    标签: sql database hibernate code-generation reverse-engineering


    【解决方案1】:

    对于像 PostgreSQL 这样的关系数据库的逆向工程,您可以尝试 Telosys (http://www.telosys.org/)。 Telosys 是一个轻量级代码生成器,使用 2 种模型,特别是(在您的情况下)可以从数据库模式创建和更新的“数据库模型”(逆向工程过程基于 JDBC 元数据)。见http://www.telosys.org/models.html

    创建(或更新)模型后,您可以使用模板来生成代码(这对于实体、DAO 等样板代码非常有效)。模板是完全可定制的,因此您可以调整现有模板或创建自己的模板,以便准确生成您想要的(cf http://www.telosys.org/templates.html

    欲了解更多信息,您可以查看此帖子:https://modeling-languages.com/telosys-tools-the-concept-of-lightweight-model-for-code-generation/

    【讨论】:

      【解决方案2】:

      经过搜索,我们得出结论,Hibernate 的逆向工程远非自动化过程。如果我错了,请纠正我。它不能自动化,因此是一个半自动化的过程,每次都需要大量的用户交互。这是因为 Hibernate 的配置非常不完整,这阻碍了它的自动化。

      如果是这种情况,那么 Hibernate 对我们没有用处,因为数据库在不断发展,我们需要经常刷新我们的 Java 代码,这可能会导致 [很多] 人为错误。

      我很想被反驳。这将允许我们实际使用 Hibernate。请做。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        • 1970-01-01
        • 2014-02-23
        • 2018-01-08
        • 1970-01-01
        相关资源
        最近更新 更多