Консоль Intellij JPA: настройте файл persistence.xml для базы данных H2 в памяти - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь использовать консоль JPA в Intellij Idea Ultimate для тестирования запросов.Проект создается с помощью JHipster 5.7.0 и использует базу данных H2 в памяти с Hazelcast.

сгенерированный application-dev.yml:

...
datasource:
        type: com.zaxxer.hikari.HikariDataSource
        url: jdbc:h2:mem:appointmentservice;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
        username: appointmentservice
        password:
        hikari:
            auto-commit: false
    h2:
        console:
            enabled: true
    jpa:
        database-platform: io.github.jhipster.domain.util.FixedH2Dialect
        database: H2
        show-sql: false
        properties:
            hibernate.id.new_generator_mappings: true
            hibernate.connection.provider_disables_autocommit: true
            hibernate.cache.use_second_level_cache: true
            hibernate.cache.use_query_cache: false
            hibernate.generate_statistics: true
            hibernate.cache.region.factory_class: com.hazelcast.hibernate.HazelcastCacheRegionFactory
            hibernate.cache.hazelcast.instance_name: appointmentservice
            hibernate.cache.use_minimal_puts: true
            hibernate.cache.hazelcast.use_lite_member: true
...

Я создал следующее 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="appointmentservice" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:appointmentservice"/>
            <property name="javax.persistence.jdbc.user" value="appointmentservice"/>
            <property name="hibernate.id.new_generator_mappings" value="true"/>
            <property name="hibernate.cache.use_second_level_cache" value="true"/>
            <property name="hibernate.cache.use_query_cache" value="false"/>
            <property name="hibernate.generate_statistics" value="true"/>
            <property name="hibernate.cache.region.factory_class" value="com.hazelcast.hibernate.HazelcastCacheRegionFactory"/>
            <property name="hibernate.cache.hazelcast.instance_name" value="appointmentservice"/>
            <property name="hibernate.cache.use_minimal_puts" value="true"/>
            <property name="hibernate.cache.hazelcast.use_lite_member" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

В веб-консоли H2 работает следующая конфигурация: enter image description here

Проблема: В представлении Intellij Persistence все энтиты отображаются, когдащелкнув по назначению службы.Однако, когда я щелкаю ее правой кнопкой мыши и открываю консоль JPA, все запросы терпят неудачу, утверждая, что таблицы не были найдены.

Например,

jpa-ql> select a from Address a
[2019-03-04 16:03:57] [42S02] Table "ADDRESS" not found; SQL statement:
[2019-03-04 16:03:57] select address0_.id as id1_1_, address0_.active as active2_1_, address0_.city as city3_1_, address0_.clientAccount_id as clientAc9_1_, address0_.country as country4_1_, address0_.institution_id as institu10_1_, address0_.location_id as locatio11_1_, address0_.jhi_number as jhi_numb5_1_, address0_.street as street6_1_, address0_.supplement as suppleme7_1_, address0_.zip as zip8_1_ from address address0_ [42102-197]

Я был бы очень признателен, если бы кто-то мог дать мненамекните, что я делаю неправильно, или, если есть хороший пример файла persistence.xml для моего случая.Заранее спасибо

Редактировать: Спасибо за все ответы!- Я последовал совету @ Gaël Marziou и удалил файл persistence.xml и использовал URL-адрес tcp для подключения к источнику данных в Intellij.Там я теперь могу просматривать содержимое таблицы.Затем мне пришлось назначить источник данных для entityManagerFactory в представлении сохраняемости Intellij.Кроме того, мне нужно было использовать тот же NamingStrategie, что и в application.yml.

1 Ответ

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

JHipster создает сервер H2 с портом TCP (см. Метод h2TCPServer() в DatabaseConfiguration.java), поэтому ваша база данных в памяти доступна из внешнего клиента с помощью URL-адреса tcp JDBC, который отличается от настроенного в вашемapplication.yml.

Внешний клиент должен использовать jdbc:h2:tcp://localhost:18080/mem:appointmentservice

Порт 18080 основан на веб-порту (например, 8080) + 10000 (см. Метод h2TCPServer()) и зарегистрирован взапуск приложения как «База данных H2 доступна на порту xxxxx».

Лично я использую DBeaver для доступа к базе данных H2 в моих приложениях JHipster.

По совету М. Deinum, вам следует удалить persistence.xml.

...