Eclipse中的JPA项目问题 - 类注释中的错误@Entity:表“xxx”无法解析

时间:2011-09-19 18:00:42

标签: eclipse postgresql jpa glassfish ejb

我正在尝试在Eclipse(Indigo)中创建简单的EJB + JPA项目。我创建了新的EJB项目:

  • 目标:现有的Glassfish服务器
  • 配置:EJB模块+ GlassFish部署描述符文件+ Java + JPA 在JPA Facet窗口中,我声明了与postgres db的连接(ping成功)

我在尝试定义实体时遇到问题:表“员工”无法解析。我添加了带有指定名称参数的@Table注释,但这不起作用。 我的persistence.xml文件:

    <persistence-unit name="pu_name">
    <jta-data-source>jdbc/baza1Postgres</jta-data-source>
</persistence-unit>

在glassfish中,我定义了JDBC Resource,其名称为:“jdbc / baza1Postgres”
如果我的桌子存在,“eclipse知道”怎么样?还有什么我应该配置的?

7 个答案:

答案 0 :(得分:36)

发现此解决方案为“表xxx无法解析”错误:

在Eclipse中,转到Window - &gt;偏好 - &gt;验证,JPA Validator,关闭Build。

有时你正在开发一个应用程序以及一个新的数据库模式,但是你得到了这个:

  

无法为表“XXXX”解析架构“null”。

无论如何,这可能不应该默认开启;人们很可能会从头开始构建新的应用程序,而不是构建适合旧数据库的新应用程序,即使它们构建的是旧的,Eclipse的JPA工具也有来自表函数的构建实体。“

答案 1 :(得分:6)

在Eclipse中让它变得快乐我必须通过JPA Tools创建表。

右键单击项目&gt; JPA工具&gt;从实体生成表

我想你也可以关闭验证,但创建表似乎更有意义。

答案 2 :(得分:4)

我正在使用Eclipse。我注意到,当我使用&#34; Data Source Explorer&#34;时,eclipse会识别表格。 JPA eviroment中的窗口(可能不需要编译,但在同一个eclipse IDE中检查数据库很有用)。然后,当我在该窗口中创建了与数据库的连接时,我在连接属性中获得了问题更改数据:

NOt Working(无法解析表格):

Database: my_database
URL: jdbc:mysql://localhost:3306
User Name: jpa_user
Password: jpa_pass

已修复(我在URL字段中添加数据库):

Database: my_database
URL: jdbc:mysql://localhost:3306/my_database
User Name: jpa_user
Password: jpa_pass

如果表格在数据库中没有大写,请记住在实体中使用@Table(name =&#34;&#34;)。

答案 3 :(得分:3)

您需要在persistence.xml文件中指定查找实体的位置,查看Java EE 6 tutorial,这里有一个示例:

  

持久性单元

     

持久性单元定义一组所有实体   由应用程序中的EntityManager实例管理的类。   这组实体类表示a中包含的数据   单数据存储。

     

持久性单元由persistence.xml配置定义   文件。以下是persistence.xml文件的示例:

 <persistence>
   <persistence-unit name="OrderManagement">
      <description>This unit manages orders and customers.
            It does not rely on any vendor-specific features and can
            therefore be deployed to any persistence provider.
      </description>
      <jta-data-source>jdbc/MyOrderDB</jta-data-source>
      <jar-file>MyOrderApp.jar</jar-file>
      <class>com.widgets.Order</class>
      <class>com.widgets.Customer</class>
  </persistence-unit>
</persistence> 
     

此文件定义了持久性   名为OrderManagement的单元,它使用支持JTA的数据源:   JDBC / MyOrderDB。 jar文件和类元素指定托管   持久化类:实体类,可嵌入类和映射   超。 jar-file元素指定的JAR文件   对包含托管的打包持久性单元可见   持久化类,而类元素显式命名   管理持久性类。

还可以使用hibernate查看这个stackoverflow question,您可以扫描具有Entity注释的类

答案 4 :(得分:1)

我遇到了这个错误,并且能够通过非常曲折的努力让它发挥作用。我正在使用PostgreSQL。

首先,我按照上面的建议做了,并关闭了构建的验证。然后我手动运行验证连接。我的步骤基本上是这样的:

1:通过Data Source Explorer连接到我的数据库。确保连接处于正确状态,然后转到TABLES并点击刷新。点击连接刷新没有刷新表。

2:可能是可选的,但我使用JPA Tools将架构导出到数据库。再次,我按步骤1点击刷新。

3:使用实体和表格注释实体。在实体中添加名称,在表注释中添加NAME,CATALOG和SCHEMA。

/var/qmail/mailname/

4:手动运行验证。添加目录很重要。这非常挑剔。

答案 5 :(得分:0)

使用maxmcbyte的答案的另一个选择是仅为特定项目设置它。右键单击该项目,然后选择“验证”。启用项目特定设置并禁用JPA Validator for Build。

答案 6 :(得分:0)

它的工作原理但是,除了 maxmcbyte (谢谢!!)答案之外,有时候最好只针对某些项目应用此解决方案,通过访问以下方式单独执行:项目属性&gt;验证&gt;转动打开 “启用项目特定设置”,然后转动关闭 构建列中的JPA验证。见图像......

Config