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】:它有效,但是,除了 maxmcbyte(谢谢!!)回答之外,有时最好将此解决方案仅应用于某些项目,通过访问单独执行:项目属性 > 验证 >在构建列中打开on “启用项目特定设置”,然后关闭 JPA Validation。看图...
【讨论】:
以上是关于Eclipse 中 JPA 项目的问题 - 注释类 @Entity 中的错误:无法解决表“xxx”的主要内容,如果未能解决你的问题,请参考以下文章
jpa,试图从实体创建表,找不到类 ExpressionVisitor
注释处理器 org.eclipse.persistence.internal.jpa.modelgen.CanonicalModelProcessor 支持的源版本 RELEASE_6 低于 sour