eclipselink не генерирует таблицы из аннотированных классов JPA - PullRequest
3 голосов
/ 06 января 2011

Моя IDE - eclipse -Helios, и я использую mojarra jsf, mysql, eclipselink для jpa.

В моем проекте, если я создаю таблицы вручную в mysql, я вижу эти таблицы в "JPAПодробности »посмотреть.И если я не создаю какую-либо таблицу, в IDE eclipse выдается ошибка: «Таблица« 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 ]

3 голосов
/ 06 января 2011

Прежде всего позвольте мне уточнить, что JPA является стандартной спецификацией для ORM, а EclipseLink является одним из разработчиков спецификации (другой пример - Hibernate).Спецификация не требует создания схемы или таблиц, хотя EclipseLink предоставляет механизм для создания таблиц через конфигурацию.Ниже приведены два свойства конфигурации, управляющие тем, что

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

Прочтите этот учебник для получения дополнительной информации (в частности раздел 3.2)

2 голосов
/ 22 сентября 2011

GlassFish читает свойство eclipselink.ddl-generation, чтобы решить, будет ли он использовать свою собственную функцию генерации таблицы - java2db.Это работает только во время развертывания, и если целью является DAS.

Неважно, какое значение eclipselink.ddl-generation.output-mode вы дадите, GlassFish установит для него значение "sql-script", если будет использоваться java2db (чтобы потом можно было запускать сценарии) или «нет», если он отключен.Посмотрите glassfish3 / постоянство / jpa-разъем / src / main / java / org / glassfish / постоянство / jpa / PersistenceUnitLoader.java.

1 голос
/ 03 декабря 2012

Я видел "Таблица 'nnn' не может быть решена" сообщается после нескольких тестов, которые я провел с JPA, MySQL, Eclipse .

Моя проблемабыл вызван мной.Я переключил передачу данных во время моих тестов.Но инструмент - я предполагаю, что я был плагином JPA - продолжал проверять имена таблиц по первому определенному соединению данных.

Итак, мое решение было:

Откройте специфичные для проекта свойства JPA (щелкните правой кнопкой мыши проект -> JPA) и убедитесь, что настройки соединения ссылаются на правильную базу данных.Восстановить ... вот и все.

0 голосов
/ 26 мая 2019

Просто пример persistence.xml, использующий eclipselink и mysql для тех, кто ищет рабочее решение:

<?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>
0 голосов
/ 16 июня 2016

Это немного поздно, но на всякий случай кто-нибудь сталкивался с этим. Вам просто нужно сделать opetarion с базой данных, и таблицы будут созданы. Это работало на меня раньше. Я надеюсь, что это поможет любому с той же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...