2011-01-06 45 views
3

我的IDE是eclipse -Helios,我使用的是mojarra jsf,mysql,eclipselink for jpa。eclipselink不会从注释的JPA类生成表格

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

谢谢 阿瑞丹姆。

回答

2

首先让我澄清一下,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节)

+0

我在persistence.xml中设置了这些属性。但它不起作用。然后,我将jpa提供程序更改为hibernate,并在我的persistence.xml中使用“hibernate.hbm2ddl.auto”value =“create”。我写了一个小的java类来创建这些表,但是它会抛出一个错误,并说“由类路径引用的项目不存在。” public class CreateTable {public static void main(String [] args){ 配置cfg =新配置(); cfg.addAnnotatedClass(Event.class); cfg.configure(); 新的SchemaExport(cfg)。创建(true,true); – Arindam 2011-01-07 10:56:10

2

GlassFish的读取性能eclipselink.ddl-generation,以决定是否将使用自己的表生成功能 - java2db。这只在部署期间以及目标是DAS时才起作用。

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

1

只见“表‘NNN’解决不了”了几个测试我JPA,MySQL和Eclipse的作出后所报告。

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

所以,我的解决办法是:

打开项目具体JPA属性(右键点击项目 - > JPA),并确保连接设置指向正确的数据库。重建......就是这样。

0

这有点晚,但以防万一有人遇到这种情况。您只需要在数据库中创建一个操作符,并创建表。它以前为我工作过。我希望这可以帮助任何有同样问题的人。