Psql exception when loading bean metadata (RESOLVED)

Hi All,
I am getting a PSQL Exception when attempting to run the following (code and exception trace below).
Does anyone know how to resolve this or what I am doing wrong?
Thanks,
Dhruti


package com.leidos.quick.start;

/**

  • Standalone LEAF Application to perform simple CRUD operations

*/
public class LEAFStandaloneApp {

/**
 * Class Logger
 */
private static final Logger LOGGER = LogManager.getLogger(LEAFStandaloneApp.class.getName());

/**
 * Main method
 * 
 * @param args
 * @throws Exception
 */
public static void main(final String[] args) throws Exception {
    LOGGER.info(String.format("%1$s starting", LEAFStandaloneApp.class.getSimpleName()));

    IEventService ES = new EventServiceSelector().getEventService();

    //Create Hibernate Session Factory 
    //@formatter:off
    SessionFactory sessionFactory = createFactory(
            DataChangeEventJpa.class, 
            LookupListJpa.class, 
            LookupListItemJpa.class, 
            BeanMetadataJpa.class,
            AlternateIdFieldMetadataJpa.class, 
            AltitudeFieldMetadataJpa.class, 
            BooleanFieldMetadataJpa.class, 
            CompositeFieldMetadataJpa.class,
            FormattedStringFieldMetadataJpa.class, 
            CoordinateFieldMetadataJpa.class, 
            CreatedByUsernameFieldMetadataJpa.class,
            CreatedDateFieldMetadataJpa.class, 
            DateFieldMetadataJpa.class, 
            DateFieldMetadataJpa.class, 
            DateTimeFieldMetadataJpa.class,
            DateTimeFieldMetadataJpa.class, 
            DisplayLabelFieldMetadataJpa.class, 
            DistanceFieldMetadataJpa.class, 
            DoubleFieldMetadataJpa.class,
            DynamicJobFieldMetadataJpa.class, 
            DynamicLookupListFieldMetadataJpa.class, 
            DynamicLookupListSubListJpa.class, 
            EditionFieldMetadataJpa.class,
            EncryptedStringFieldMetadataJpa.class, 
            FloatFieldMetadataJpa.class, 
            FormulaFieldMetadataJpa.class, 
            IdFieldMetadataJpa.class,
            IntegerFieldMetadataJpa.class, 
            LastModifiedByUsernameFieldMetadataJpa.class, 
            LastModifiedDateFieldMetadataJpa.class,
            ListOfDataObjectsFieldMetadataJpa.class, 
            LongFieldMetadataJpa.class, 
            LookupListFieldMetadataJpa.class, 
            MetadataTemplateJpa.class,
            MultiValueLookupListFieldMetadataJpa.class, 
            ParentIdFieldMetadataJpa.class, 
            ParentTypeFieldMetadataJpa.class, 
            QualifiedIdFieldMetadataJpa.class,
            QualifiedTypeFieldMetadataJpa.class, 
            RootIdFieldMetadataJpa.class, 
            RootTypeFieldMetadataJpa.class, 
            SetOfStringsFieldMetadataJpa.class,
            StringFieldMetadataJpa.class, 
            TagsFieldMetadataJpa.class, 
            TimeFieldMetadataJpa.class, 
            TimeFieldMetadataJpa.class, 
            TypeFieldMetadataJpa.class,
            ValidationStringJpa.class, 
            VersionFieldMetadataJpa.class);
    
    //@formatter:on

    IDataService dataService = DataServiceSql.newBuilder(ES)
            .withSessionFactory(sessionFactory)
            .build();
    dataService.upsertResources(ResourceLocations.INSTANCE, Context.makeSystemContext());

    Collection<DataObject> dataObjects = new ArrayList<>();
    //new ResourceLoader().loadDataObjects(new ResourceConfigSource(ResourceLocations.class, "/dataobjects"));
    DataObject simpleDataObject = DataObject.newBuilder()
            .withType("Room")
            .withId("RoomID")
            .withUnsafe("roomName", "Purple Room")
            .build();

    dataObjects.add(simpleDataObject);

    Collection<BeanMetadata> beans = new ArrayList<>();
    // ResourceLoader().loadBeanMetadata(new ResourceConfigSource(LEAFStandaloneApp.class, "/beanmetadata"));

    BeanMetadata metadata = BeanMetadata.newBuilder()
            .withType("Room")
            .addNonInheritedFieldMetadata(StringFieldMetadata.newBuilder()
                    .withPropName("roomName")
                    .withLongName("Room Name")
                    .withShortName("Room Name")
                    .build())
            .addNonInheritedFieldMetadata(LookupListFieldMetadata.newBuilder()
                    .withListName("buildingNames")
                    .withPropName("buildingName")
                    .withLongName("Building Name")
                    .withShortName("Building Name")
                    .build())
            .addNonInheritedFieldMetadata(IntegerFieldMetadata.newBuilder()
                    .withPropName("capacity")
                    .withLongName("Capacity")
                    .withShortName("Capacity")
                    .build())
            .withEdition(1L)
            .build();
    beans.add(metadata);

    Collection<LookupList> lookupLists = new ArrayList<>();
    // new ResourceLoader().loadLookupLists(new ResourceConfigSource(ResourceLocations.class, "/resources/lookupLists"));

    LookupListItem item = LookupListItem.newBuilder()
            .withValue("Wayne Tower")
            .build();
    LookupList list = LookupList.newBuilder()
            .withName("buildingNames")
            .withEdition(1L)
            .addItem(item)
            .build();

    lookupLists.add(list);

    Collection<MetadataTemplate> metadataTemplates = new ArrayList<>();
    //new ResourceLoader().loadMetadataTemplate(new ResourceConfigSource(LEAFStandaloneApp.class, "/metadataTemplates"));

    TemplateNode room = TemplateNode.newBuilder("Room")
            .build();

    MetadataTemplate metadataTemplate = MetadataTemplate.newBuilder("MetadataTemplate Example")
            .withRootNodes(List.of(room))
            .build();
    metadataTemplates.add(metadataTemplate);

    // Upsert 
    dataService.getLookupListService()
            .upsert(lookupLists, Context.makeSystemContext());
    //FIXME
    dataService.getMetadataService()
            .upsertBeanMetadata(beans, Context.makeSystemContext());
    dataService.getMetadataService()
            .upsertTemplates(metadataTemplates, Context.makeSystemContext());

    try {

        dataService.getDataObjectService()
                .addRoots(dataObjects, Context.makeSystemContext());
    }
    catch (Exception e) {
        e.printStackTrace();
    }

}

public static SessionFactory createFactory(final Class<?>... annotatedClasses) {

    Configuration configuration = new Configuration();

    Properties settings = new Properties();
    settings.put(Environment.DRIVER, "org.postgresql.Driver");
    settings.put(Environment.URL, "jdbc:postgresql://localhost:5432/newleaf2");
    settings.put(Environment.USER, "postgres");
    settings.put(Environment.PASS, "password");
    settings.put(Environment.DIALECT, "org.hibernate.dialect.PostgreSQL95Dialect");
    settings.put(Environment.PHYSICAL_NAMING_STRATEGY, "org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl");
    settings.put(Environment.IMPLICIT_NAMING_STRATEGY, "org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl");
    settings.put(Environment.GLOBALLY_QUOTED_IDENTIFIERS, true);
    settings.put(Environment.HBM2DDL_AUTO, "create-drop");

    configuration.setProperties(settings);

    StandardServiceRegistry registry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties())
            .build();
    try {
        //From {@link: HibernateSessionUtils} 
        MetadataSources metadataSources = new MetadataSources(registry);

        Arrays.stream(annotatedClasses)
                .forEach(metadataSources::addAnnotatedClass);
        getCustomFieldMetadataAnnotatedClasses(annotatedClasses).forEach(metadataSources::addAnnotatedClass);

        return metadataSources.buildMetadata()
                .buildSessionFactory();
    }
    catch (Throwable t) {
        LOGGER.error("Uncaught exception while attempting to create SessionFactory.", t);
        StandardServiceRegistryBuilder.destroy(registry);
        throw t;
    }
}

/**
 * From {@link: HibernateSessionUtils} Loads the annotated classes for custom FieldMetadata if the passed in
 * annotated classes contains all of {@link MetadataSqlConstants#CLASSES}, otherwise this returns an empty Set.
 */
private static Collection<Class<?>> getCustomFieldMetadataAnnotatedClasses(final Class<?>... annotatedClasses) {
    Set<Class<?>> annotatedClassesSet = Sets.newHashSet(annotatedClasses);
    return annotatedClassesSet.containsAll(MetadataSqlConstants.CLASSES) ? CustomFieldMetadataRegistrySql.getFieldMetadataJpaClasses() : Set.of();
}

}

Exception:

14:44:30.032 [main] e[32mINFO e[m c.l.q.s.LEAFStandaloneApp - LEAFStandaloneApp starting
14:44:30.768 [main] e[32mINFO e[m o.h.Version - HHH000412: Hibernate ORM core version 5.4.30.Final
14:44:31.101 [main] e[32mINFO e[m o.h.a.c.Version - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
14:44:31.323 [main] e[33mWARN e[m o.h.o.c.pooling - HHH10001002: Using Hibernate built-in connection pool (not for production use!)
14:44:31.333 [main] e[32mINFO e[m o.h.o.c.pooling - HHH10001005: using driver [org.postgresql.Driver] at URL [jdbc:postgresql://localhost:5432/newleaf2]
14:44:31.333 [main] e[32mINFO e[m o.h.o.c.pooling - HHH10001001: Connection properties: {password=****, user=postgres}
14:44:31.333 [main] e[32mINFO e[m o.h.o.c.pooling - HHH10001003: Autocommit mode: false
14:44:31.337 [main] e[32mINFO e[m o.h.e.j.c.i.DriverManagerConnectionProviderImpl - HHH000115: Hibernate connection pool size: 20 (min=1)
14:44:31.807 [main] e[32mINFO e[m o.h.d.Dialect - HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL95Dialect
14:44:35.045 [main] e[32mINFO e[m o.h.o.c.access - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@35ff072c] 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.
14:44:35.079 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.079 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - relation “DynamicLookupListSubList” does not exist, skipping
14:44:35.081 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.081 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - relation “FieldMetadata” does not exist, skipping
14:44:35.082 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.083 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - relation “LookupListItem” does not exist, skipping
14:44:35.084 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.084 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - relation “MetadataTemplateRootNodes” does not exist, skipping
14:44:35.085 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.085 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - relation “ValidationString” does not exist, skipping
14:44:35.086 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.086 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “BeanMetadata” does not exist, skipping
14:44:35.087 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.088 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “DataChangeEvent” does not exist, skipping
14:44:35.089 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.089 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “DynamicLookupListSubList” does not exist, skipping
14:44:35.090 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.090 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “FieldMetadata” does not exist, skipping
14:44:35.091 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.091 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “LookupList” does not exist, skipping
14:44:35.092 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.092 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “LookupListItem” does not exist, skipping
14:44:35.093 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.093 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “MetadataTemplate” does not exist, skipping
14:44:35.094 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.094 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “MetadataTemplateRootNodes” does not exist, skipping
14:44:35.095 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Warning Code: 0, SQLState: 00000
14:44:35.095 [main] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - table “ValidationString” does not exist, skipping
14:44:35.100 [main] e[32mINFO e[m o.h.o.c.access - HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@fb2c2f3] 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.
14:44:35.255 [main] e[32mINFO e[m o.h.e.t.j.p.i.JtaPlatformInitiator - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
14:44:35.325 [main] e[33mWARN e[m c.l.l.d.s.BaseDataService - Using default servicePrefix=Unnamed. This should be overridden before production use.
14:44:38.932 [RxCachedThreadScheduler-3] e[33mWARN e[m o.h.e.j.s.SqlExceptionHelper - SQL Error: 0, SQLState: 42703
14:44:38.933 [RxCachedThreadScheduler-3] e[1;31mERRORe[m o.h.e.j.s.SqlExceptionHelper - ERROR: column “owningbeanmetadatatype” does not exist
Hint: Perhaps you meant to reference the column “DynamicLookupListSubList.owningBeanMetadataType”.
Position: 46
Exception in thread “main” com.leidos.leaf.beans.exception.persistence.BeanMetadataPersistenceException: Uncaught exception while performing BeanMetadata IMPORT.
at com.leidos.leaf.beans.exception.persistence.handler.NotificationHandlerForBeanMetadataPersistenceException.generateException(NotificationHandlerForBeanMetadataPersistenceException.java:30)
at com.leidos.leaf.beans.exception.persistence.handler.NotificationHandlerForPersistenceException.accept(NotificationHandlerForPersistenceException.java:84)
at com.leidos.leaf.beans.exception.persistence.handler.NotificationHandlerForPersistenceException.accept(NotificationHandlerForPersistenceException.java:43)
at io.reactivex.rxjava3.internal.functions.Functions$NotificationOnError.accept(Functions.java:319)
at io.reactivex.rxjava3.internal.functions.Functions$NotificationOnError.accept(Functions.java:310)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onError(FlowableDoOnEach.java:104)
at io.reactivex.rxjava3.internal.util.AtomicThrowable.tryTerminateConsumer(AtomicThrowable.java:94)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.drainLoop(FlowableFlatMapSingle.java:268)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.drain(FlowableFlatMapSingle.java:237)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.onError(FlowableFlatMapSingle.java:142)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.onNext(FlowableFlatMapSingle.java:122)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onNext(FlowableDoOnEach.java:92)
at io.reactivex.rxjava3.internal.operators.single.SingleFlatMapPublisher$SingleFlatMapPublisherObserver.onNext(SingleFlatMapPublisher.java:107)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable$IteratorSubscription.slowPath(FlowableFromIterable.java:243)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable$BaseRangeSubscription.request(FlowableFromIterable.java:131)
at io.reactivex.rxjava3.internal.subscriptions.SubscriptionHelper.deferredSetOnce(SubscriptionHelper.java:202)
at io.reactivex.rxjava3.internal.operators.single.SingleFlatMapPublisher$SingleFlatMapPublisherObserver.onSubscribe(SingleFlatMapPublisher.java:102)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribe(FlowableFromIterable.java:69)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribeActual(FlowableFromIterable.java:47)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15696)
at io.reactivex.rxjava3.internal.operators.single.SingleFlatMapPublisher$SingleFlatMapPublisherObserver.onSuccess(SingleFlatMapPublisher.java:96)
at io.reactivex.rxjava3.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:55)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
at io.reactivex.rxjava3.internal.operators.single.SingleFlatMapPublisher.subscribeActual(SingleFlatMapPublisher.java:59)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:50)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMapSingle.subscribeActual(FlowableFlatMapSingle.java:53)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:50)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableOnErrorNext.subscribeActual(FlowableOnErrorNext.java:39)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableToList.subscribeActual(FlowableToList.java:44)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:38)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlattenIterable.subscribeActual(FlowableFlattenIterable.java:79)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15696)
at io.reactivex.rxjava3.internal.operators.single.SingleFlatMapPublisher$SingleFlatMapPublisherObserver.onSuccess(SingleFlatMapPublisher.java:96)
at io.reactivex.rxjava3.internal.operators.single.SingleMap$MapSingleObserver.onSuccess(SingleMap.java:65)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableToListSingle$ToListSubscriber.onComplete(FlowableToListSingle.java:102)
at io.reactivex.rxjava3.internal.operators.mixed.CompletableAndThenPublisher$AndThenPublisherSubscriber.onComplete(CompletableAndThenPublisher.java:83)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.checkTerminated(FlowableObserveOn.java:199)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.runAsync(FlowableObserveOn.java:394)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$BaseObserveOnSubscriber.run(FlowableObserveOn.java:176)
at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute statement
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1681)
at com.leidos.leaf.metadata.service.beanmetadata.dao.sql.BeanMetadataDaoSql.doDeleteFieldsForBeans(BeanMetadataDaoSql.java:272)
at com.leidos.leaf.metadata.service.beanmetadata.dao.sql.BeanMetadataDaoSql.deleteFieldsForBeans(BeanMetadataDaoSql.java:242)
at com.leidos.leaf.internal.sql.util.SqlDaoHelper.doLenientUpsert(SqlDaoHelper.java:566)
at com.leidos.leaf.internal.sql.util.SqlDaoHelper.lambda$streamingLenientUpsertWithLenientVersioning$9(SqlDaoHelper.java:416)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableMap$MapSubscriber.onNext(FlowableMap.java:64)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump$ErrorJumpFront$EndSubscriber.onNext(FlowableErrorJump.java:154)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableBuffer$PublisherBufferExactSubscriber.onComplete(FlowableBuffer.java:152)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump$ErrorJumpFront.onComplete(FlowableErrorJump.java:119)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable$IteratorSubscription.slowPath(FlowableFromIterable.java:262)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable$BaseRangeSubscription.request(FlowableFromIterable.java:131)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump$ErrorJumpFront.request(FlowableErrorJump.java:124)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableBuffer$PublisherBufferExactSubscriber.request(FlowableBuffer.java:79)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump$ErrorJumpFront$EndSubscriber.request(FlowableErrorJump.java:178)
at io.reactivex.rxjava3.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn$ObserveOnSubscriber.onSubscribe(FlowableObserveOn.java:296)
at io.reactivex.rxjava3.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump$ErrorJumpFront$EndSubscriber.onSubscribe(FlowableErrorJump.java:149)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableBuffer$PublisherBufferExactSubscriber.onSubscribe(FlowableBuffer.java:93)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump$ErrorJumpFront.onSubscribe(FlowableErrorJump.java:103)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribe(FlowableFromIterable.java:69)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribeActual(FlowableFromIterable.java:47)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump$ErrorJumpFront.subscribeActual(FlowableErrorJump.java:94)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableBuffer.subscribeActual(FlowableBuffer.java:45)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15696)
at hu.akarnokd.rxjava3.operators.FlowableErrorJump.subscribeActual(FlowableErrorJump.java:72)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:38)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableObserveOn.subscribeActual(FlowableObserveOn.java:56)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMap.subscribeActual(FlowableFlatMap.java:52)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15696)
at io.reactivex.rxjava3.internal.operators.single.SingleFlatMapPublisher$SingleFlatMapPublisherObserver.onSuccess(SingleFlatMapPublisher.java:96)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableCollectSingle$CollectSubscriber.onComplete(FlowableCollectSingle.java:119)
at io.reactivex.rxjava3.internal.subscribers.BasicFuseableSubscriber.onComplete(BasicFuseableSubscriber.java:120)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableDoOnEach$DoOnEachSubscriber.onComplete(FlowableDoOnEach.java:135)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable$IteratorSubscription.fastPath(FlowableFromIterable.java:204)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable$BaseRangeSubscription.request(FlowableFromIterable.java:129)
at io.reactivex.rxjava3.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
at io.reactivex.rxjava3.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableCollectSingle$CollectSubscriber.onSubscribe(FlowableCollectSingle.java:83)
at io.reactivex.rxjava3.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
at io.reactivex.rxjava3.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribe(FlowableFromIterable.java:69)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFromIterable.subscribeActual(FlowableFromIterable.java:47)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:50)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:38)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableCollectSingle.subscribeActual(FlowableCollectSingle.java:52)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
at io.reactivex.rxjava3.internal.operators.single.SingleFlatMapPublisher.subscribeActual(SingleFlatMapPublisher.java:59)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15696)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableScalarXMap$ScalarXMapFlowable.subscribeActual(FlowableScalarXMap.java:160)
at io.reactivex.rxjava3.core.Flowable.subscribe(Flowable.java:15750)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableToListSingle.subscribeActual(FlowableToListSingle.java:56)
at io.reactivex.rxjava3.core.Single.subscribe(Single.java:4813)
at io.reactivex.rxjava3.core.Single.blockingGet(Single.java:3644)
at com.leidos.leaf.internal.publisher.RxJavaUtils.toList(RxJavaUtils.java:39)
at com.leidos.leaf.internal.metadata.service.beanmetadata.dao.IBeanMetadataDaoRx.upsert(IBeanMetadataDaoRx.java:147)
at com.leidos.leaf.metadata.service.beanmetadata.dao.BeanMetadataDaoExtensible.lambda$new$1(BeanMetadataDaoExtensible.java:87)
at com.leidos.leaf.hooked.IMethod.invoke(IMethod.java:113)
at com.leidos.leaf.hooked.default_.hooks.CacheHook.lambda$hookInvoker$6(CacheHook.java:153)
at com.leidos.leaf.hooked.BaseExtensibleService.invoke(BaseExtensibleService.java:118)
at com.leidos.leaf.metadata.service.beanmetadata.dao.BeanMetadataDaoExtensible.upsert(BeanMetadataDaoExtensible.java:110)
at com.leidos.leaf.internal.metadata.service.beanmetadata.dao.BeanMetadataDaoRxWrapper.upsertRx(BeanMetadataDaoRxWrapper.java:66)
at com.leidos.leaf.metadata.service.MetadataServiceDaoBacked.doImport(MetadataServiceDaoBacked.java:602)
at com.leidos.leaf.metadata.service.MetadataServiceDaoBacked.lambda$upsertBeanMetadataRx$30(MetadataServiceDaoBacked.java:535)
at io.reactivex.rxjava3.internal.operators.flowable.FlowableFlatMapSingle$FlatMapSingleSubscriber.onNext(FlowableFlatMapSingle.java:118)
… 44 more
Caused by: org.hibernate.exception.SQLGrammarException: could not execute statement
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:103)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:99)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:200)
at org.hibernate.hql.internal.ast.exec.BasicExecutor.doExecute(BasicExecutor.java:80)
at org.hibernate.hql.internal.ast.exec.BasicExecutor.execute(BasicExecutor.java:50)
at org.hibernate.hql.internal.ast.exec.DeleteExecutor.execute(DeleteExecutor.java:177)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:458)
at org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:377)
at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1438)
at org.hibernate.query.internal.AbstractProducedQuery.doExecuteUpdate(AbstractProducedQuery.java:1690)
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1672)
… 119 more
Caused by: org.postgresql.util.PSQLException: ERROR: column “owningbeanmetadatatype” does not exist
Hint: Perhaps you meant to reference the column “DynamicLookupListSubList.owningBeanMetadataType”.
Position: 46
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2553)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2285)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:323)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:481)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:401)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:164)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:130)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197)
… 127 more

Hello! Is there anyway you could send your dependencies section of your build file (build.gradle or a Maven pom or something)? I’d like to try to recreate this, and that will definitely help!

1 Like

Hi Mark,
These are the dependencies:

ext {
frameworkVersion = “3.2.3”
restEasyVersion = “3.11.0.Final”
jettyVersion = “9.4.22.v20191022”
junitVersion = “5.6.2”
beanMetadataDir = “src/main/resources/beanMetadata”
constantsDir = “src/main/java/com/leidos/quick/start/metadata/constants”
}

dependencies {
implementation “com.leidos.leaf:framework-services-rest-easy:$frameworkVersion”
implementation “com.leidos.leaf:framework-services-metrics:$frameworkVersion”
implementation “io.dropwizard.metrics:metrics-jetty9:4.1.0”
implementation “org.eclipse.jetty:jetty-servlet:$jettyVersion”
implementation “org.eclipse.jetty.websocket:javax-websocket-server-impl:$jettyVersion”
implementation “org.jboss.resteasy:resteasy-jaxrs:$restEasyVersion”
implementation “org.jboss.resteasy:resteasy-wadl:$restEasyVersion”
implementation “org.jboss.resteasy:resteasy-client:$restEasyVersion”
implementation “io.swagger.core.v3:swagger-jaxrs2:2.1.1”
implementation “org.aeonbits.owner:owner:1.0.12”
implementation ‘com.github.ben-manes.caffeine:jcache:2.8.5’
implementation ‘com.leidos.leaf:framework-services-tools:’ + frameworkVersion
implementation ‘org.apache.logging.log4j:log4j-core:2.13.3’
implementation ‘org.slf4j:slf4j-log4j12:1.7.30’
}

In addition to the above, I have the following jars added to my classpath:

    	<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/framework-services-hibernate-3.2.5.jar" sourcepath="/home/vagrant/Downloads/leaf-framework-services-dev-3.3@8a254cc7974"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/javax.persistence-api-2.2.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/jta-1.1.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/byte-buddy-dep-1.11.0.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/hibernate-jpa-2.1-api-1.0.0.Final.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/hibernate-commons-annotations-5.1.2.Final.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/hibernate-core-5.4.30.Final.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/classmate-1.3.1.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/dom4j-1.6.1.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/postgresql-42.2.20.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/antlr-2.7.7.jar"/>
<classpathentry kind="lib" path="/home/vagrant/Documents/LEAF/h2-1.4.200.jar"/>

I’ve been able to recreate your issue, and the determining factor seems to be this line:

settings.put(Environment.GLOBALLY_QUOTED_IDENTIFIERS, true);

I get why that’s generally a good idea, but LEAF uses it’s own SQL injection protectors to guarantee that any generated SQL cannot contain reserved words. I think the act of using the quoted identifiers, possibly mixed with the naming strategy is leading to linkages between LEAF entities being broken. This was kind of the key hint that made me look into that from your stacktrace:

Caused by: org.postgresql.util.PSQLException: ERROR: column “owningbeanmetadatatype” does not exist
Hint: Perhaps you meant to reference the column “DynamicLookupListSubList.owningBeanMetadataType”.

Not sure what if any options you have to remove that setting or if there as an alternate naming config you could use to get around that. If possible, I would suggest just not setting that property when making a SessionFactory for LEAF to use.

1 Like

Thank you!!! I had originally added that as a workaround for a different exception (related to tables not being mapped due to the cases being different) :slight_smile: but it is all working now, thank you for your speedy help!

Not a problem! Glad you got past the issue!

1 Like