Невозможно сгенерировать схемы базы данных из классов модели @Entity на сервере GlassFish 5, используя MySQL - PullRequest
0 голосов
/ 03 марта 2019

Здравствуйте. У меня проблема с включением автоматического создания таблиц базы данных из моделей Java @ Class.Я перепробовал почти все.

Сначала я создал проект maven в Intellij Idea. Я скачал реализацию API JavaEE 8, которую я использую.

Я использую сервер Glassfish 5.0 в качестве java ee8 поставщик реализации и база данных MySQL.

Структура моего проекта:

enter image description here

Мой pom.xml выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.zerg.web</groupId>
<artifactId>PlanYourTime</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
    <!-- https://mvnrepository.com/artifact/javax/javaee-api -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Моя модель @Entity class, для которой я хочу создать таблицы в моей базе данных MySQL.

package model;

import javax.persistence.*;
@Entity
@TableGenerator(name = "USER")
public class User {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "USERID")
private int userId;
@Column(name = "USERNAME")
private String username;
@Column(name = "PASSWORD")
private String password;
@Column(name = "EMAIL")
private String email;

public User(String username, String password, String email) {
    this.username = username;
    this.password = password;
    this.email = email;
}

public User() {
}

public int getUserId() {
    return userId;
}

public void setUserId(int userId) {
    this.userId = userId;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}
}

Мой файл persistence.xml src / main / java / META-INF /выглядит так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
         version="2.2">

<persistence-unit name="myPu" transaction-type="JTA">
    <jta-data-source>jdbc/PlanYourTime</jta-data-source>
    <properties>
        <property name="javax.persistence.schema-generation.database.action" value="create"/>
        <property name="javax.persistence.schema-generation.create-source" value="metadata"/>
        <property name="javax.persistence.schema-generation.drop-source" value="metadata"/>
        <property name="javax.persistence.sql-load-script-source" value="META-INF/load-script.sql"/>
        <property name="eclipselink.logging.level" value="FINE"/>
        <property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
    </properties>
</persistence-unit>

И на своей странице администрирования сервера Glassfish я также добавил ресурс Jdbc resourcure и пул соединений jdbc следующим образом:

enter image description here

enter image description here

И моя структура военных артефактов выглядит как в IntellijIdea, которую я развертываю на сервере Glassfish 5.0:

enter image description here

Когда я проверял server.log для glassfish, я не получаю никаких ошибок.

Я будуочень благодарен за любую помощь.

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Glassfish захватывает функциональность генерации DDL EclipseLink, заставляя его выписывать сценарии, более непосредственно контролируя процесс генерации схемы.Это прекрасно работает в большинстве случаев, но не в тех случаях, когда вы хотите использовать EclipseLink «create-or-exte-tables», который не подходит для генерации скриптов.

См. https://stackoverflow.com/a/13388317/496099

0 голосов
/ 05 марта 2019

Я решил свою проблему, добавив Java-класс с EntityManager.Теперь таблицы создаются автоматически из моих моделей JavaEntity в мою базу данных.

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class Test{
     @PersistenceContext
     private EntityManager em;

}
0 голосов
/ 03 марта 2019

Вы создали / использовали менеджер сущностей?Если нет, модуль сохранения не запустился.Сделайте вставку с помощью диспетчера сущностей или попробуйте:

Используйте eclipselink.deploy-on-startup для настройки развертывания при запуске (при создании EntityManagerFactory) вместо того, чтобы происходить при первом создании EntityManager.

https://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_deploy_on_startup.htm#delayonstartup

...