eclipse从数据库生成实体类不会拉动关联

时间:2017-03-04 20:23:07

标签: java eclipse hibernate sybase

我正在使用hibernate和现有数据库重写应用程序。这个应用程序有所有选择查询它基本上是只读应用程序。

我正在尝试使用eclipse中的JPA工具从表创建实体类,因为没有在数据库上定义约束,生成的模型类没有关系。应用程序在该数据库中使用大约100个表。

我试图找出现有SQL查询中的表之间的关系,也使用数据库中的数据。但是因为有很多表,所以很难手动完成。

由于应用程序数量使用的数据库无法在数据库上强制执行关系

问题:

1.如果对数据库没有约束,有没有办法生成具有关系的实体?

2.如果需要手动完成,最好的方法是什么?

3 个答案:

答案 0 :(得分:5)

  

1.如果有的话,有没有办法生成具有关系的实体   数据库没有限制吗?

即使有可能,也会非常容易出错。在哪个规则上,关系可以以惯用且可靠的方式生成?

  

2.如果需要手动完成,最好的方法是什么?

如果我到了你的地方,我会以安全的方式做事 在生成实体之后手动添加实体之间的所有关系可能容易出错并且很麻烦。

假设您在实体的生成阶段出错(并且您可以看到表的数量),并且您希望在实体中手动添加十几个关系时再次生成它们。 通过再次开始生成,您将失去实体中所有这些手动添加的关系。
您必须从零开始。

我认为你应该以相反的方式做事。

例如,您可以创建数据库的副本(我指的是副本,因为我认为如果您对表没有约束,则是有意的)并在数据库副本的表上添加约束。
然后,从具有指定约束的这些表中,您可以生成具有所有必需关系的实体。

这种方式提供了两个优点

  • 能否快速反馈您要添加表格的PK / FK约束是否与现有数据兼容。

  • 能够以增量方式进行,并且能够在需要时执行某些步骤。
    例如,如果您在实体的生成阶段犯了一些错误(并且可以让它们看到表的数量),您可以重复生成阶段而不会丢失由于您在表上添加的PK / FK约束而导致的自动生成关系

答案 1 :(得分:3)

没有直接的方法来创建具有所需关系的所有实体类。

但是如果你想在生成的实体中添加关系,我猜的最简单的方法是在表关联中提供关系。

您可以点击此链接以获取更多参考资料。

http://help.eclipse.org/luna/index.jsp?topic=%2Forg.eclipse.jpt.doc.user%2Ftasks024.htm

答案 2 :(得分:-2)

不幸的是OP(Chris)在近4个月内还没有出现,所以可能需要一段时间(如果有的话)才能从Chris获得更多细节,例如,Sybase软件在使用(ASE,SQLAnywhere,IQ,Advantage)?

从Sybase ASE的角度来看,我想调查一些领域:

  • 运行 sp_helpkey 以查看是否已描述任何主/外键/公共密钥;这样做的缺点是这些类型的密钥仅用于文档目的(即,它们不强制执行任何操作),并且通常不会随着时间的推移保持最新状态(即,即使某些密钥存在,它们也可能已过时)

  • 运行 sp_helpconstraint (无参数)以查看数据库中是否定义了任何参照约束;任何约束都可能比没有任何约束

  • 如果这是一个生产数据库,请查看数据库的dev / test / pre-prod版本是否定义了任何RI约束;存在用于维护/检查RI约束的处理开销(又称性能命中),因此在非产品数据库中找到RI约束(以确保新代码符合RI)并不是闻所未闻的RI约束在prod数据库中被删除(假设所有提升到生产的代码都被保证符合RI标准)

  • 检查是否存在触发器( sysobjects.type =' TR &#39 ;; sysobjects.type =' U'和deltrig / instrig / updtrig!= 0 );一些数据库,尤其是恐龙之前出现的数据库,通过触发器实现RI;所以可以通过仔细阅读触发代码来推导出一些RI约束

  • 最后但同样重要的是,公司中是否有人负责或者知道在哪里找到该系统的(公司)数据模型和/或实体图;也许,只是也许,这个数据库并没有按照某人的裤子设计[也许圣诞老人确实存在,嗯?]