我的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>
谢谢你, 阿瑞丹姆。
答案 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>