Nano Hash - криптовалюты, майнинг, программирование

Как связать объекты JPA с PersistenceUnits

У меня есть два сопоставления persistenceUnits с двумя разными схемами Oracle, схемы похожи, но с разными именами таблиц. Когда я пытаюсь развернуть свое приложение, я получаю исключение Hibernate «Missing Table», похоже, что Hibernate ищет таблицу в неправильном persistenceUnit.

.ear # POIPersistenceUnit \ ": org.hibernate.HibernateException: Отсутствующая таблица: POI_SERVICE Причина: org.hibernate.HibernateException: Отсутствующая таблица: POI_SERVICE"}}

таблица «POI_SERVICE» принадлежит «POIExtractorPersistenceUnit» persistenceUnit, а не «POIPersistenceUnit» persistenceUnit

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

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

<persistence-unit name="POIExtractorPersistenceUnit">

    <jta-data-source>java:/XAPOIExtractorDS</jta-data-source>

    <class>za.co.fnb.cii.poiextractor.persistence.model.IdentificationRequest</class>
    <class>za.co.fnb.cii.poiextractor.persistence.model.IdentificationResponse</class>
    <class>za.co.fnb.cii.poiextractor.persistence.model.POIService</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.flushMode" value="FLUSH_AUTO" />
        <property name="hibernate.hbm2ddl.auto" value="validate" />
        <property name="hibernate.show_sql" value="true" />

    </properties>

</persistence-unit>

<persistence-unit name="POIPersistenceUnit">

    <jta-data-source>java:/XACompendiumDS</jta-data-source>

    <class>za.co.fnb.cii.poiextractor.persistence.entities.IdentificationRequestIncoming</class>
    <class>za.co.fnb.cii.poiextractor.persistence.entities.IdentificationResponseIncoming</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.flushMode" value="FLUSH_AUTO" />
        <property name="hibernate.hbm2ddl.auto" value="validate" />
        <property name="hibernate.show_sql" value="false" />

    </properties>

</persistence-unit>

I have also tried to annotate the entities as follows @PersistenceUnit(unitName = "POIExtractorPersistenceUnit") but still no luck, the error is still there.

/**
 * Created by on 21-Dec-15.
 */
@Entity
@Table(name = "POI_SERVICE")
@PersistenceUnit(unitName = "POIExtractorPersistenceUnit")
@NamedQueries({
        @NamedQuery(name="findServiceRecordByApplicationName",
                query="SELECT pois FROM POIService pois WHERE pois.application = :applicationName")
})
public class POIService implements IEntity{

    @Id
    @GeneratedValue(generator="service_config_seq")
    @SequenceGenerator(name="service_config_seq", sequenceName="service_config_seq", allocationSize=1)
    private long id;

    private String application;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "last_update",nullable = false)
    private Date lastUpdate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "last_date",nullable = true)
    private Date lastDate;

    @Column(name = "last_record",nullable = true)
    private long lastRecord;

    @Override
    public long getId() {
        return id;
    }

    public String getApplication() {
        return application;
    }

    public void setApplication(String application) {
        this.application = application;
    }

    public Date getLastUpdate() {
        return lastUpdate;
    }

    public void setLastUpdate(Date lastUpdate) {
        this.lastUpdate = lastUpdate;
    }

    public Date getLastDate() {
        return lastDate;
    }

    public void setLastDate(Date lastDate) {
        this.lastDate = lastDate;
    }

    public long getLastRecord() {
        return lastRecord;
    }

    public void setLastRecord(long lastRecord) {
        this.lastRecord = lastRecord;
    }
}

ОБНОВЛЕНИЕ:

Трассировки стека

ОБНОВЛЕНИЕ 2: когда я удаляю это свойство из файла persistence.xml, все работает нормально.

JPA

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

<persistence-unit name="POIExtractorPersistenceUnit">

    <jta-data-source>java:/XAPOIExtractorDS</jta-data-source>

    <class>za.co.fnb.cii.poiextractor.persistence.model.IdentificationRequest</class>
    <class>za.co.fnb.cii.poiextractor.persistence.model.IdentificationResponse</class>
    <class>za.co.fnb.cii.poiextractor.persistence.model.POIService</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.flushMode" value="FLUSH_AUTO" />
        <property name="hibernate.hbm2ddl.auto" value="validate" />
        <property name="hibernate.show_sql" value="true" />

    </properties>

</persistence-unit>

<persistence-unit name="POIPersistenceUnit">

    <jta-data-source>java:/XACompendiumDS</jta-data-source>

    <class>za.co.fnb.cii.poiextractor.persistence.entities.IdentificationRequestIncoming</class>
    <class>za.co.fnb.cii.poiextractor.persistence.entities.IdentificationResponseIncoming</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>

    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.flushMode" value="FLUSH_AUTO" />
        <property name="hibernate.hbm2ddl.auto" value="validate" />
        <property name="hibernate.show_sql" value="false" />

    </properties>

</persistence-unit>
принадлежит одной единице сохранения состояния, или @PersistenceUnit(unitName = "POIExtractorPersistenceUnit"). Вы не можете смешивать несколько единиц сохранения состояния с одним и тем же
/**
 * Created by on 21-Dec-15.
 */
@Entity
@Table(name = "POI_SERVICE")
@PersistenceUnit(unitName = "POIExtractorPersistenceUnit")
@NamedQueries({
        @NamedQuery(name="findServiceRecordByApplicationName",
                query="SELECT pois FROM POIService pois WHERE pois.application = :applicationName")
})
public class POIService implements IEntity{

    @Id
    @GeneratedValue(generator="service_config_seq")
    @SequenceGenerator(name="service_config_seq", sequenceName="service_config_seq", allocationSize=1)
    private long id;

    private String application;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "last_update",nullable = false)
    private Date lastUpdate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "last_date",nullable = true)
    private Date lastDate;

    @Column(name = "last_record",nullable = true)
    private long lastRecord;

    @Override
    public long getId() {
        return id;
    }

    public String getApplication() {
        return application;
    }

    public void setApplication(String application) {
        this.application = application;
    }

    public Date getLastUpdate() {
        return lastUpdate;
    }

    public void setLastUpdate(Date lastUpdate) {
        this.lastUpdate = lastUpdate;
    }

    public Date getLastDate() {
        return lastDate;
    }

    public void setLastDate(Date lastDate) {
        this.lastDate = lastDate;
    }

    public long getLastRecord() {
        return lastRecord;
    }

    public void setLastRecord(long lastRecord) {
        this.lastRecord = lastRecord;
    }
}
.

Но тебе не нужно этого делать.

<property name="hibernate.hbm2ddl.auto" value="validate" />

  • А аннотацию PersistenceUnit можно снова удалить из сущностей, что совершенно не место для использования этой аннотации. 08.01.2016
  • @DuranWesleyHarris Я попробовал ваше решение, но мне не повезло. В итоге я удалил свойство '‹property name = hibernate.hbm2ddl.auto value = validate /›', которое сработало. 08.01.2016
  • Это означает, что таблица на самом деле еще не существует ... имеет смысл 08.01.2016
  • 2016-01-08 12:24: 52,587 INFO [java.sql.DatabaseMetaData] (Пул потоков ServerService - 58) HHH000262: Таблица не найдена: POI_SERVICE 2016-01-08 12:24: 52,590 ОШИБКА [org.jboss.msc .service.fail] (Пул потоков ServerService - 58) MSC000001: Не удалось запустить службу jboss.persistenceunit. "poiextractor-ear-1.0.0-SNAPSHOT.ear # POIPersistenceUnit": org.jboss.msc.service.StartException в службе jboss.persistenceunit. "poiextractor-ear-1.0.0-SNAPSHOT.ear # POIPersistenceUnit": org.hibernate.HibernateException: Отсутствует таблица: POI_SERVICE в org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 PersistenceServiceImpl $ 1. : 172) [wildfly-jpa-8.2.0.Final.jar: 8.2.0.Final] в org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1 $ 1.run (PersistenceUnitServiceImpl.java:117) [wildfly-jpa- 8.2.0.Final.jar: 8.2.0.Final] в java.security.AccessController.doPrivileged (собственный метод) [rt.jar: 1.8.0_60] в org.wildfly.security.manager.WildFlySecurityManager.doChecked (W ildFlySecurityManager.java:474) [wildfly-security-manager-1.0.0.Final.jar: 1.0.0.Final] в org.jboss.as.jpa.service.PersistenceUnitServiceImpl $ 1.run (PersistenceUnitServiceImpl.java:182) [ wildfly-jpa-8.2.0.Final.jar: 8.2.0.Final] в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) [rt.jar: 1.8.0_60] в java.util.concurrent .ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) [rt.jar: 1.8.0_60] в java.lang.Thread.run (Thread.java:745) [rt.jar: 1.8.0_60] в org.jboss .threads.JBossThread.run (JBossThread.java:122) [jboss-threads-2.1.1.Final.jar: 2.1.1.Final] Причина: org.hibernate.HibernateException: Отсутствует таблица: POI_SERVICE в org.hibernate. cfg.Configuration.validateSchema (Configuration.java:1335) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] в org.hibernate.tool.hbm2ddl.SchemaValidator.validate (SchemaValidator.java:155) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] в org.hibernate.internal.SessionFact oryImpl. (SessionFactoryImpl.java:525) [hibernate-core-4.3.7.Final.jar: 4.3.7.Final] в org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1859) [hibernate-core- 4.3.7.Final.jar: 4.3.7.Final] в org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform (EntityManagerFactoryBuilderImpl.java:852) [hibernate-entitymanager-4.3.7.Final.jar: 4.3 .7.Final] в org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $ 4.perform (EntityManagerFactoryBuilderImpl.java:845) [hibernate-entitymanager-4. 3.7.Final.jar: 4.3.7.Final] в org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl (ClassLoaderServiceImpl.java:398) [hibernate-core-4.3.7.Final.jar: 4.3. 7.Final] в org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl.java:844) [hibernate-entitymanager-4.3.7.Final.jar: 4.3.7.Final] в org.jboss.as .jpa.hibernate4.TwoPhaseBootstrapImpl.build (TwoPhaseBootstrapImpl.java:44) [jipijapa-hibernate4-3-1.0.1. java: 154) [wildfly-jpa-8.2.0.Final.jar: 8.2.0.Final] ... еще 8 11.01.2016
  • 2016-01-08 12:24: 58,786 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] (Пул потоков ServerService - 57) HHH000261: Найдена таблица: POIOPS.POI_SERVICE 08.01.2016 12:24: 58,788 INFO [ org.hibernate.tool.hbm2ddl.TableMetadata] (Пул потоков ServerService - 57) HHH000037: Столбцы: [last_record, application, last_update, id, last_date] 2016-01-08 12:25: 00,774 INFO [org.hibernate.tool .hbm2ddl.TableMetadata] (Пул потоков ServerService - 57) HHH000261: Найдена таблица: POIOPS.IDENTIFICATION_REQUEST 2016-01-08 12: 25: 00,775 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] (Поток ServerService - 57 ) HHH000037: Столбцы: [sworkstationid, yafp2wsqimage, stransactiontime, created, stype, bretphoto, scardseqno, stranid, breturnname, smode, requesttype, ssiteid, identityresponse_id, sidn, id, yafp1wsqimage, update-01-08, ifpind2], ifpind2 : 25: 05,385 ИНФОРМАЦИЯ [org.hibernate.tool.hbm2ddl.TableMetadata] (Пул потоков ServerService - 57) HHH000261: Найдена таблица: POIO PS.IDENTIFICATION_RESPONSE 2016-01-08 12: 25: 05,387 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] (ServerService Thread Pool - 57) HHH000037: Столбцы: [bnameret, created, sfpind2, scallcentreno, ifp2score, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, stranid, sidissuedate, ierror, ifp1score, sfp1result, sidn, sname, serror, sfp2result, sfpind1, yaphoto, ssmartcardind, id, ssurname, обновлено] 2016-01-08 12:25: 09,367 ИНФОРМАЦИЯ [org.hibernate.tool.hbm2ddlata] (Пул потоков ServerService - 57) HHH000261: Найдена таблица: POIOPS.IDENTIFICATIONREQUEST 2016-01-08 12: 25: 09,369 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] (Пул потоков ServerService - 57) HHH000037: Столбцы: [sworkstationid, responseerror, yafp2wsqimage, stransactiontime, created, stype, bretphoto, scardseqno, stranid, breturnname, smode, requesttype, ssiteid, sidn, id, yafp1wsqimage, updated, ifpind1, ifpind2] 2016-01-08 12:25:15:15 [org.hibernate.tool.hbm2ddl.TableMetadata] (Пул потоков ServerService - 57) HHH000261: Основание таблицы d: POIOPS.IDENTIFICATIONRESPONSE 2016-01-08 12:25: 15,853 INFO [org.hibernate.tool.hbm2ddl.TableMetadata] (ServerService Thread Pool - 57) HHH000037: Столбцы: [bnameret, created, sfpind2, scallcentreno, ifp2score, stranid, sidissuedate, ierror, ifp1score, sfp1result, sidn, sname, serror, sfp2result, sfpind1, yaphoto, ssmartcardind, id, ssurname, updated, request_id] 2016-01-08 12:25: 15,994 ERROR [org.jboss.as. controller.management-operation] (поток-обработчика-управления - 2) JBAS014613: Операция ("развертывание") завершилась неудачно - адрес: ([("развертывание" => "poiextractor-ear-1. 0.0-SNAPSHOT.ear ")]) - описание ошибки: {" JBAS014671: Failed services "=> {" jboss.persistenceunit. \ "Poiextractor-ear-1.0.0-SNAPSHOT.ear # POIPersistenceUnit \" "=>" org .jboss.msc.service.StartException в службе jboss.persistenceunit. \ "poiextractor-ear-1.0.0-SNAPSHOT.ear # POIPersistenceUnit \": org.hibernate.HibernateException: Отсутствует таблица: POI_SERVICE Вызвано: org.hibernate.HibernateException : Отсутствует таблица: POI_SERVICE "}} 2016-01-08 12: 25: 15,996 ОШИБКА [org.jboss.as.server] (поток-обработчика-управления - 2) JBAS015870: Развертывание развертывания" poiextractor-ear-1.0.0 -SNAPSHOT.ear "был откат со следующим сообщением об ошибке: {" JBAS014671: Failed services "=> {" jboss.persistenceunit. \ "Poiextractor-ear-1.0.0-SNAPSHOT.ear # POIPersistenceUnit \" "=>" org.jboss.msc.service.StartException в службе jboss.persistenceunit. \ "poiextractor-ear-1.0.0-SNAPSHOT.ear # POIPersistenceUnit \": org.hibernate.HibernateException: Отсутствует таблица: POI_SERVICE Вызвано: org. hibernate.HibernateException: Отсутствует таблица: POI_SERVICE "}} 2016-01-08 12:25: 15,997 INFO [org.jboss.as.connector.deployers.jdbc] (служебный поток MSC 1-6) JBAS010418: Остановлена ​​служба драйвера с драйвером -name = poiextractor-ear-1.0.0-SNAPSHOT.ear_org.h2.Driver_1_4 2016-01-08 12:25: 15,998 INFO [org.jboss.as.jpa] (Пул потоков ServerService - 57) JBAS011410: Остановка постоянства Модуль (этап 2 из 2) Служба poiextractor-ear-1.0.0-SNAPSHOT.ear # POIExtractorPersistenceUnit '2016-01-08 12:25: 16,018 INFO [org.jboss.weld.deployer] (поток службы MSC 1-9 ) JBAS016009: Остановка службы сварки для развертывания poiextractor-ear-1.0.0-SNAPSHOT.ear 2016-01-08 12:25: 16,043 INFO [org.jboss.as.jpa] (Пул потоков ServerService - 57) JBAS011410: Остановка Единица сохранения состояния (фаза 1 из 2) Служба poiextractor-ear-1.0.0-SNAPSHOT.ear # POIPersistenceUnit '2016-01-08 12:25: 16,043 INFO [org.jboss.as.jpa] (Пул потоков ServerService - 59) JBAS011410: Остановка блока сохранения состояния (фаза 1 2) Сервис 'poiextractor-ear-1.0.0-SNAPSHOT.ear # POIExtractorPersistenceUnit' 11.01.2016

Ответы:


1

Вы можете иметь одну единицу сохранения состояния и использовать атрибут schema при сопоставлении сущностей.

Если вы используете несколько единиц сохранения, вам понадобится несколько persistence.xml, несколько EntityManagerFactory и, возможно, JTA, если вам нужны глобальные транзакции.

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

Вы упомянули, что таблицы находятся в разных схемах. Для начала следует указать имя схемы в аннотации @Table.

29.03.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..