2012-05-24 52 views
3

我在eclipse中创建了一个工作项目,它创建了一个从实体到mysql数据库的JPA表(仍在学习)。不幸的是,由于我想在那里做'测试'和'生产'数据库,所以它在错误的数据库中创建了表。不知何故,它获得了“生产”数据库的详细信息,即使它看起来像选择的数据库连接用于测试。 我篡改了一下这个项目,并使它与某个(测试)的正确连接对象连接。我可以在eclipse(都是dbs)中ping数据库,并在Data Source Explorer中查看数据库。 但是现在我无法通过右键单击它并选择'JPA'工具'>'从实体生成表格'来创建项目表。 创建开始和完成没有错误,就像一切正常,但我没有看到任何数据库中的表。 (在eclipse数据库浏览器或从命令行)。 persistence.xml应该没问题,因为它之前已经创建了一个表。无法在eclipse中创建jpa表

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

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

该项目也是一个Maven项目,它使用SVN。日食/项目的maven成功加载了依赖项,SVN没有任何复杂性。

由于Maven的存在,有2个persistence.xml文件(只有登录凭证和数据库名称发生变化)用于生产和测试。可能是db连接在第一个地方被检查并从错误的文件加载。 (只是猜测)

另外我试图在生成表格时创建script.sql。我找到了这个文件,但它完全是空的。

无论如何,现在的问题是我无法在任何地方创建表格。 我完全被这个困惑了。任何提示,我应该看看解决这个问题?

+0

太多纯文本。没有阅读。 – JMelnik

+1

它可能不相关,但persistence.xml显示eclipseLink提供程序DDL gen属性,但将Hibernate指定为jpa提供程序。如果要使用运行时DDL生成,则需要将提供者切换到org.eclipse.persistence.jpa.PersistenceProvider或指定Hibernate设置。只是一个评论,因为我不知道达利实际上使用这个来创建表 – Chris

+0

试过两个提供商。不用找了。 –

回答

2

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

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

再次感谢克里斯,甚至认为我未能在第一次尝试,不得不花几个小时解决这个。

+0

我后来注意到答案是Chris,而不是JMelnik。 JMelnik是一个屁股,因为错误的信用,所以对Chris很抱歉。 –

0

花费一整天的时间。

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

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

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

我用eclipse向导创建了一个'JPA Entity'类。 (添加'id'(PK)和'content'字段) 将我之前的项目中的'pom.xml'复制到新的项目中(只做了像项目名称这样的小改动)。

还从前一个项目(src/main/java/META-INF /,包括no'test')复制'persistence.xml'文件。从持久性文件更改数据库详细信息和登录凭证。

eclipse中的项目'Maven项目'(右键点击项目名称>配置) 因为它现在是一个Maven项目,默认的'persistence.xml'可以被删除,因为它在错误的地方。 (Mavenizing该项目删除了来自不存在罐子的所有错误。xml)

试图再次为项目创建表(同样的错误,但是等待...)。

右键点击项目>的Maven>禁用Maven的自然

然后再由它的Maven项目中,右键点击项目>配置> ...

再次尝试创建表,它创造了他们。一切正常!

去图!

似乎一切都好,就像我怀疑的一样。似乎有一些与Maven(插件)+日食的错误。

在前面的项目中做同样的技巧将无济于事。我甚至用向导创建了实体类(删除了现有的)。 <类>声明被添加到'persistence.xml',但它仍然不会执行该表。 (也尝试删除并重新添加maven性质)

我可能会错过某个过程/做了不同的事情或者做错了整个过程。但考虑到我得到其他项目的工作,而其他项目没有,使用相同的技巧,似乎有一个很大的讨厌的错误。

+0

这里不添加实体文件的链接,因为没有什么特定的东西与周围的教程找到的文件相比。 pom。xml可能是特定于环境的,但它也是从其他帖子复制的。根据我发现的提示,我对自己做了一些更改。在这里发布,告诉某人需要某种maven + jpa pom。 http://pastebin.com/5abmc2D2 –

+0

不要说这是你能想象的最好的jpa + maven pom,所以通过一切手段做一个更好的。我也是Maven noob。 :)至少这是可行的,不需要你在settings.xml中调整,将文件安装到本地存储库或其他类似的东西。 –

+0

另外,pom.xml中的版本应该是相当新的,因为我从它们的原始源中检查了它们(大部分)。日期将是2012年5月25日。 –

1

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

上周一切都完美无缺,但现在一切都是f * *。我甚至在不同的工作区创建了一个新的独立项目,但它发生了同样的错误。显然这是一个日食/插件错误,否则我无法解释它。使用eclipse 4.2.0。我不高兴。

编辑:删除Dali工具后,JPA配置器,Seam 3插件创建实体似乎再次工作。不知道为什么,很可能是冲突,但它仍不能解释为什么它现在发生,而不是1个月前。从那时起,我并没有改变我的eclipse安装...

+0

很快:我的问题是我在maven pom.xml中有错误的提供者。它似乎有效,但造成了所提到的错误。下面接受我自己的答案。 –

+0

感谢您的回答。我同时也找到了一个“解决方案”: - | (请参阅上面编辑的帖子)。我仍然不满意,但至少现在它再次运作。 – Malvin

+1

我的猜测是,它可能与类加载有关。你说你有Dali和Seam插件。大概他们都有JPA的实现,而Dali不是正确的。 –