【问题标题】:can't create jpa tables in eclipse无法在eclipse中创建jpa表
【发布时间】:2012-05-31 00:16:18
【问题描述】:

我在 Eclipse 中有一个工作项目,它创建了一个从实体到 mysql 数据库的 JPA 表(仍在学习中)。不幸的是,它在错误的数据库中创建了表,因为我希望有“测试”和“生产”数据库。不知何故,它获得了“生产”数据库的详细信息,即使看起来所选的数据库连接是用于测试的。 我稍微篡改了项目并使其与正确的连接对象连接以进行某些(测试)。我可以在 Eclipse 中 ping 数据库(两个数据库)并在数据源资源管理器中查看数据库。 但现在我无法通过右键单击项目并选择“JPA 工具”>“从实体生成表”来为项目创建表。 创建开始和结束时都没有错误,就像一切正常一样,但我在两个数据库中都看不到表。 (在 Eclipse 数据库资源管理器中或从命令行)。 persistence.xml 应该没问题,因为它之前已经创建了一个表。

唯一的错误是实体类,因为实体注释“无法解析表 xxx”。正如我所看到的,它来自未创建的表。

这里是 persistence.xml 以防万一。 http://pastebin.com/djPZei90

该项目也是一个 Maven 项目,它使用 SVN。 maven 为 eclipse/project 成功加载了依赖项,并且 SVN 没有任何复杂性。

由于 Maven,有 2 个 persistence.xml 文件(仅登录凭据和数据库名称更改),用于生产和测试。可能是在第一个位置检查并从错误的文件加载了 db-connection。 (只是猜测)

我还尝试在生成表时创建 script.sql。我找到了文件,但它完全是空的。

无论如何,现在的问题是我无法在任何地方创建表。 我对此完全感到困惑。有什么提示我应该在哪里解决这个问题?

【问题讨论】:

  • 纯文本太多。没读过。
  • 可能不相关,但persistence.xml 显示eclipseLink 提供程序DDL 生成属性,但指定Hibernate 作为jpa 提供程序。如果您打算使用运行时 DDL 生成,您需要将提供程序切换到 org.eclipse.persistence.jpa.PersistenceProvider 或指定 Hibernate 设置。只是一个评论,因为我不知道大理实际上使用它来创建表
  • 两个提供商都试过了。没有变化。

标签: mysql eclipse jpa eclipselink


【解决方案1】:

克里斯说得对,即使我在第一次阅读时没有正确理解答案。 我尝试使用其他提供商,但我可能不小心修改了错误的文件(2 'persistence.xml' 文件,因为它是一个 maven 项目),或者可能有其他一些我没有发现的原因。 我之前得到了一个提示,我应该使用给定的提供程序(在 persitence.xml 中)。因为我毕竟没有太注意它。由于使用 eclipselink,提供者必须是:

    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

再次感谢克里斯,即使我第一次尝试失败了,不得不再花几个小时来解决这个问题。

【讨论】:

  • 我后来注意到答案是 Chris 的,而不是 JMelnik 的。 JMelnik 是个混蛋,所以为 Chris 道歉,因为他的功劳不实。
【解决方案2】:

你能解决这个问题吗?不幸的是,我偶然发现了同样罕见的问题,这完全没有意义。无论出于何种原因,JPA 工具都不会添加映射类,尽管它会将它们写入persistence.xml。

前一周一切正常,但现在一切都糟透了**。我什至在不同的工作区创建了一个新的独立项目,但它发生了同样的错误。显然这是一个eclipse/plugin bug,否则我无法解释。使用 Eclipse 4.2.0。我不开心。

编辑:删除 Dali Tools、JPA Configurator、Seam 3 Plugin 创建实体后似乎又可以工作了。不知道为什么,很可能是冲突,但它仍然无法解释为什么它现在而不是 1 个月前发生。从那以后我根本没有更改我的 Eclipse 安装...

【讨论】:

  • 简短地说:我的问题是我在 maven pom.xml 中提供了错误的提供程序。它看似有效,但导致了上述错误。在下面接受了我自己的答案。
  • 感谢您的回答。与此同时,我也找到了一个“解决方案”:-| (见上面编辑过的帖子)。我仍然对它不满意,但至少它现在又可以工作了。
  • 我的猜测是它可能与类加载有关。你说你有 Dali 和 Seam 插件。假设他们都有 JPA 的实现,而 Dali 的实现是不正确的。
  • 我也面临同样的问题。您是如何删除 Dali 插件的?您删除了哪些插件?
【解决方案3】:

花一整天的时间。

我在 Eclipse (Indigo btw) 中创建了一个全新的 (JPA) 项目。 还为此创建了一个新数据库(mysql)。

为此在 Eclipse 中建立了连接。文件 > 新建 > 其他... > 连接配置文件。

制作一个新的包结构,让Eclipse创建'persistence.xml'(src/META-INF/persistence.xml)。

我使用 Eclipse 向导创建了一个“JPA 实体”类。 (添加了 'id' (PK) 和 'content' 字段) 将我之前项目中的“pom.xml”复制到新项目中(仅对项目名称进行了微小的更改)。

还从上一个项目中复制了“persistence.xml”文件(src/main/java/META-INF/,不包括“测试”)。更改了持久性文件中的数据库详细信息和登录凭据。

在 Eclipse 中创建项目“Maven 项目”(右键单击项目名称 > 配置) 由于它现在是一个 Maven 项目,因此可以删除默认的“persistence.xml”,因为它位于错误的位置。 (Mavenizing项目使用pom.xml从不存在的jar中删除了所有错误)

尝试为项目再次创建表(同样的错误,但请稍等...)。

右键单击项目 > Maven > 禁用 Maven Nature

然后再次将其设为maven项目,右键单击项目>配置> ...

尝试再次创建表并创建它们。一切正常!

去看看!

似乎一切都很好,就像我怀疑的那样。 maven (plugin) + eclipse 似乎有某种错误。

在上一个项目中使用相同的技巧将无济于事。我什至用向导创建了实体类(删除了现有的)。 声明被添加到'persistence.xml',但它仍然不会做表。 (还尝试删除并重新添加 maven 性质)

我可能在过程中遗漏了一些东西/做了不同的事情或一起做错了。但是考虑到我得到了其他项目的工作而其他人没有,使用相同的技巧,似乎有一个大的讨厌的错误。

【讨论】:

  • 这里没有添加实体文件的链接,因为与周围的教程中找到的文件相比,没有什么特别的。 pom.xml 可能特定于环境,但它也是从其他一些帖子中复制的。我根据我找到的提示进行了一些自己的更改。在这里发布它,以防有人需要某种 maven+jpa pom。 pastebin.com/5abmc2D2
  • 并不是说这是你能想象到的最好的 jpa+maven pom,所以一定要做得更好。我也是一个Maven菜鸟。 :) 至少这是可行的,并且不需要您调整 settings.xml,将文件安装到本地存储库或其他类似的蹩脚的东西。
  • 另外,pom.xml 中的版本应该是相当新的,因为我从原始来源检查了(大部分)它们。日期为 25/5/2012。
猜你喜欢
  • 2018-05-11
  • 2016-07-22
  • 2019-02-03
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多