4

药膏!

关于 SO的另一个问题/答案的一部分(以及声称相同的其他陈述):

如果您通过 JPA 更新数据库模式(虽然通常不是一个好习惯)

你真的不应该使用 JPA 实现来生成你的数据库模式吗?

无论如何,我必须自己建模实体和关系。我还需要定义约束,例如 notnull、主键和外键、数据类型和大小。

假设使用中的 JPA 实现在其 DDL 模式创建代码中没有任何缺陷,并且假设我确实正确指定了所有 JPA 约束、关系等,那么 JPA 实现创建的数据库模式应该完全相同 - 如果不是更好-作为我自己手工制作的架构,对吗?

这不包括“特殊情况”,例如(业务逻辑)特定的 INSERT 触发器等,因为这些完全不能由 JPA 实现生成(据我所知,如果我错了,请纠正我)。

您对此有何看法?
我目前首先手工制作我的数据库模式,然后设置 JPA 约束、关系等,并让 JPA 实现也创建一个数据库模式。然后我比较这两个模式,看看我是否正确地完成了设置。这当然意味着我还必须指定相同的列名等,就像我为我的手工架构所做的那样。

使我的问题更准确;我不会盲目相信 ORM 框架会为我生成模式。我宁愿对架构在我的脑海中的外观有所了解,然后配置框架以匹配它。
我想您只能手动创建更多/最有效的模式,但毕竟我需要(或者更确切地说想要)将它们与 ORM 框架一起使用。因此,虽然我不应该这样做,但无论如何在创建数据库模式时,我都需要牢记 ORM 框架的局限性。

因此,由于我使用 ORM 框架是为了不必关心 RDBMS 的细节,所以让我的应用程序使用 RDBMS 特定的 DDL 创建模式有什么意义?
如果我必须使用一些现有的和外来的模式,我不需要(重新)创建模式,因为我可能无法使用这样的通用工具作为 ORM 框架。

4

2 回答 2

8

我通常只让 JPA 最初创建模式。之后,我对其进行微调并手动维护它。

我更喜欢手动维护架构有几个原因:

  • 它允许在 SQL 代码中添加注释
  • 它允许为表格和列添加注释/描述
  • 它允许指定表空间和其他使用 JPA 注释无法实现的东西
  • 它允许在多个 SQL 文件之间拆分模式创建(例如,每个表一个 + 一个用于约束)
  • 它让我可以在我的架构迁移脚本中重用架构创建脚本的某些部分。例如,如果我的应用程序的版本 2 引入了 3 个新表,我需要一个可以重用创建三个新表的三个 SQL 文件的更改脚本
  • 我有时需要对序列使用同义词,而不是具体的
  • 它让我为主键约束选择名称
  • 可能我忘记了其他一些原因
于 2011-09-30T08:29:06.670 回答
5

我通常做相反的事情,即手动创建数据库模式,然后我使用我的 IDE 从中导出 JPA 实体结构。之后,我再次手动优化 JPA 实体。

于 2011-09-30T08:27:47.997 回答