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

Posted

技术标签:

【中文标题】Eclipse 中 JPA 项目的问题 - 注释类 @Entity 中的错误:无法解决表“xxx”【英文标题】:Problem with JPA Project in Eclipse - error in class annotated @Entity: Table "xxx" cannot be resolved 【发布时间】:2011-11-20 11:21:11 【问题描述】:

我正在尝试在 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 资源,名称为:“jdbc/baza1Postgres” 如果我的表存在,如何“日食知道”?我还应该配置什么?

【问题讨论】:

【参考方案1】:

找到了“无法解析表 xxx”错误的解决方案:

在 Eclipse 中,转到 Window -> Preferences -> Validation,JPA Validator,为 Build 关闭。

有时您正在开发一个应用程序以及与之配套的新数据库架构,但您会得到以下信息:

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

这可能无论如何都不应该默认开启;人们最有可能从头开始构建新应用程序,而不是构建新应用程序以适应旧数据库,即使他们确实从旧数据库构建,Eclipse 的 JPA 工具也具有从表构建实体的功能。”

【讨论】:

来源:adterrasperaspera.com/blog/2009/08/11/…【参考方案2】:

在 Eclipse 中,为了让它开心,我不得不通过 JPA 工具创建表。

右键单击项目 > JPA 工具 > 从实体生成表

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

【讨论】:

【参考方案3】:

我正在使用 Eclipse。我注意到当我在 JPA 环境中使用“数据源资源管理器”窗口时,eclipse 会识别表(可能不需要编译,但对于在同一个 eclipse IDE 中检查数据库很有用)。然后,当我在该窗口中创建与数据库的连接时,我在连接属性中遇到了更改数据的问题:

不工作(表无法解析):

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="")。

【讨论】:

添加新的数据库连接时有点混乱,向导会询问数据库名称,但您还需要将其添加到上面提到的 url 中!当我在 url 中添加数据库名称时,一切都按预期工作!【参考方案4】:

您需要在您的 persistence.xml 文件中指定查找实体的位置,查看Java EE 6 tutorial,这是从那里获取的示例:

持久性单位

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

持久化单元由 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-file 和 class 元素指定托管 持久性类:实体类、可嵌入类和映射类 超类。 jar-file 元素指定 JAR 文件 对包含托管的打包持久性单元可见 持久性类,而类元素显式命名 托管持久性类。

还可以看看这个*** question using hibernate 你可以扫描你的类有实体注释

【讨论】:

【参考方案5】:

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

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

1:通过数据源资源管理器连接到我的数据库。确保连接处于正确状态,我转到 TABLES 并点击刷新。在连接上点击刷新不会刷新表格。

2:可能是可选的,但我使用 JPA 工具将架构导出到数据库。同样,我在第 1 步中点击了刷新。

3:用Entity和Table来注解Entity。在entity中添加名称,在Table注解中添加NAME、CATALOG和SCHEMA。

@Entity(name="DBAssembly")
@Table(name="DBAssembly",catalog="lag",schema="public")

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

【讨论】:

添加目录+模式+断开/连接/刷新DataSourceExplorer连接到数据库对我有用。谢谢卡尔。【参考方案6】:

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

【讨论】:

【参考方案7】:

它有效,但是,除了 ma​​xmcbyte(谢谢!!)回答之外,有时最好将此解决方案仅应用于某些项目,通过访问单独执行:项目属性 > 验证 >在构建列中打开on “启用项目特定设置”,然后关闭 JPA Validation。看图...

【讨论】:

以上是关于Eclipse 中 JPA 项目的问题 - 注释类 @Entity 中的错误:无法解决表“xxx”的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 通过JPA自动生成注解实体

用Eclipse生成JPA元模型

jpa,试图从实体创建表,找不到类 ExpressionVisitor

注释处理器 org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 支持的源版本 RELEASE_6 低于 sour

springboot jpa oracle实体类中配置注解无法在数据库中生成注释的一种解决方式

如何从 JPA 注释的实体类生成 JPA 映射文件?