繁体   English   中英

eclipselink 不会从带注释的 JPA 类生成表

[英]eclipselink does not generate tables from annotated JPA classes

我的 IDE 是 eclipse -Helios,我使用的是 mojarra jsf、mysql、eclipselink for jpa。

在我的项目中,如果我在 mysql 中手动创建表,我可以在“JPA 详细信息”视图中看到这些表。 如果我不创建任何表,eclipse IDE 会显示错误,“无法解析表“trainingsession””。

我不确定出了什么问题。 JPA 什么时候创建这些表? 怎么样? 我的persistence.xml如下,

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" 
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="wompower2" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>trainer</jta-data-source>
    <class>com.jsfcompref.trainer.entity.User</class>
    <class>com.jsfcompref.trainer.entity.TrainingSession</class>
    <class>com.jsfcompref.trainer.entity.Event</class>
    <class>com.jsfcompref.trainer.entity.AbstractEntity</class>
    <validation-mode>NONE</validation-mode>
    <properties>
      <property name="eclipselink.target-database" value="MySQL"/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
      <property name="eclipselink.ddl-generation.output-mode" value="both"/>
      <property name="eclipselink.application-location" value="C:\wompower2\DDL"/>
      <property name="eclipselink.create-ddl-jdbc-file-name" value="create.sql"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/demo"></property>
      <property name="javax.persistence.jdbc.user" value="user"></property>
      <property name="javax.persistence.jdbc.password" value="pwd"></property>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"></property>
    </properties>
  </persistence-unit>
</persistence>

谢谢你,阿林达姆。

首先让我澄清一下,JPA 是 ORM 的标准规范,而 EclipseLink 是该规范的实现者之一(Hibernate 是另一个示例)。 尽管 EclipseLink 提供了一种通过配置为您创建表的机制,但该规范并未强制要求创建模式或表。 下面是控制这两个配置属性

<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />

阅读 本教程以获取更多信息(特别是 3.2 部分)

GlassFish 读取属性eclipselink.ddl-generation来决定是否使用它自己的表生成功能——java2db。 这仅在部署期间以及目标是 DAS 时有效。

您提供的eclipselink.ddl-generation.output-mode的值无关紧要,如果要使用 java2db(以便它可以运行脚本)或“none”,GlassFish 会将其设置为“sql-script”如果它被禁用。 参见 glassfish3/persistence/jpa-connector/src/main/java/org/glassfish/persistence/jpa/PersistenceUnitLoader.java。

在使用JPA、MySQL、Eclipse进行了几次测试后,我看到“无法解析表 'nnn'”

我的问题是我自己造成的。 我在测试期间切换了数据连接。 但是该工具 - 我假设我是 JPA 插件 - 继续根据我定义的第一个数据连接验证表名。

所以,我的解决方案是:

打开项目特定的 JPA 属性(右键单击项目 -> JPA)并确保连接设置引用正确的数据库。 重建……就是这样。

这有点晚了,但以防万一有人遇到这个。 您只需要对数据库运行诸如 INSERT 或 SELECT 之类的查询,就会创建表。 它以前对我有用。 我希望这可以帮助任何有同样问题的人。

只是一个使用 eclipselink 和 mysql 的 persistence.xml 示例,供其他人寻找工作解决方案:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

  <persistence-unit name="java2curs"  transaction-type="RESOURCE_LOCAL">    
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>db.YourClasses</class>      
  <properties>
    <property name="javax.persistence.jdbc.url" 
          value="jdbc:mysql://localhost:3306/dbname"/>
    <property name="javax.persistence.jdbc.user" value="dbuser"/>
    <property name="javax.persistence.jdbc.password" value="dbpassword"/>
    <property name="eclipselink.ddl-generation" value="create-tables" />
    <property name="eclipselink.ddl-generation.output-mode" value="database" />
    <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>   
   </properties>
 </persistence-unit>

</persistence>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM