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

时间:2011-01-06 05:56:31

标签: jpa java-ee

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

在我的项目中,如果我在mysql中手动创建表,我可以在“JPA Details”视图中看到这些表。如果我不创建任何表,eclipse IDE会显示错误,“Table”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>

谢谢你, 阿瑞丹姆。

5 个答案:

答案 0 :(得分:3)

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

的两个配置属性
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />

浏览this tutorial for more information(特别是3.2节)

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我在 JPA,MySQL,Eclipse 进行了几次测试后,看到“Table'nnn'无法解析”报道。

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

所以,我的解决方案是:

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

答案 3 :(得分:0)

这有点晚了,但万一有人碰到这个。您只需要对数据库创建一个opetarion,就会创建表。它以前对我有用。我希望这可以帮助任何有同样问题的人。

答案 4 :(得分:0)

只是一个使用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>