Hibernate JPA не создает скрипт для схемы базы данных

Я настроил свойство jakarta.persistence.schema-generation.scripts.create-target для создания скрипта в имени файла. Но он точно не создается, так как я искал файл во всем своем домашнем каталоге (в MacOS) с помощью команды find, и он не был найден.

Я пробовал foo.sql, ./foo.sql и /tmp/foo.sql и не могу найти его ни в своем домашнем каталоге, ни в /tmp

Таблицы базы данных действительно создаются, и я не вижу ошибок в выводе.

Вот мой полный простой код:

persistence.xml

<persistence 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" version = "2.0">
    <persistence-unit name = "foo">
        <class>Foo</class>
        <properties>
            <property name = "jakarta.persistence.jdbc.url" value = "jdbc:postgresql:///main" />
            <property name = "jakarta.persistence.jdbc.user" value = "main" />
            <property name = "jakarta.persistence.jdbc.password" value = "big1704cloudmain" />
            <property name = "hibernate.default_schema" value = "foo" />
            <property name = "jakarta.persistence.schema-generation.database.action" value = "validate" />
            <property name = "jakarta.persistence.schema-generation.scripts.create-target" value = "foo.sql" />
        </properties>
    </persistence-unit>
</persistence>

Main.kt

import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Persistence

@Entity
data class Foo (@Id val n: Int)

fun main() {
    Persistence.createEntityManagerFactory("foo")
    println("Hello World!")
}

build.gradle.kts

plugins {
    kotlin("jvm") version "latest.release"
    application
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.postgresql:postgresql:latest.release")
    implementation("org.hibernate:hibernate-core:latest.release")
}

application {
    mainClass.set("MainKt")
}

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(18))
    }
}

Run Output

3:15:36 PM: Executing 'run'...

> Task :compileKotlin UP-TO-DATE
> Task :compileJava NO-SOURCE
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE

> Task :run
Hello World!

BUILD SUCCESSFUL in 737ms
3 actionable tasks: 1 executed, 2 up-to-date
May 13, 2023 3:15:36 PM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: foo]
May 13, 2023 3:15:36 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 6.2.2.Final
May 13, 2023 3:15:36 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000406: Using bytecode reflection optimizer
May 13, 2023 3:15:36 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using built-in connection pool (not intended for production use)
May 13, 2023 3:15:36 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: Loaded JDBC driver class: org.postgresql.Driver
May 13, 2023 3:15:36 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001012: Connecting with JDBC URL [jdbc:postgresql:///main]
May 13, 2023 3:15:36 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=main}
May 13, 2023 3:15:36 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
May 13, 2023 3:15:36 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH10001115: Connection pool size: 20 (min=1)
May 13, 2023 3:15:36 PM org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl logSelectedDialect
INFO: HHH035001: Using dialect: org.hibernate.dialect.PostgreSQLDialect, version: org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$DialectResolutionInfoImpl@72ade7e3
May 13, 2023 3:15:36 PM org.hibernate.bytecode.internal.BytecodeProviderInitiator buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : bytebuddy
May 13, 2023 3:15:36 PM org.hibernate.metamodel.internal.EntityInstantiatorPojoStandard resolveConstructor
INFO: HHH000182: No default (no-argument) constructor for class: Foo (class must be instantiated by Interceptor)
May 13, 2023 3:15:36 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
May 13, 2023 3:15:36 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@7ff35a3f] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
3:15:36 PM: Execution finished 'run'.
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно Создание схемы базы данных с помощью Spring Data JPA, вам необходимо включить это:

 spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create

в свойствах единицы персистентности.

Если вы все еще не можете найти сгенерированный скрипт после добавления и использования вышеизложенного, попробуйте сделать путь create-target абсолютным путем.

Другие вопросы по теме