Hi All,
When I re-run the following code, I get a PSQL Exception that the relation dataobject already exists. Is there a property or param I can set somewhere so that it doesn’t attempt to re-create the tables ?
public class LEAFStandaloneApp {
/**
* Class Logger
*/
private static final Logger LOGGER = LogManager.getLogger(LEAFStandaloneApp.class.getName());
/**
* Main method. <br>
* Creates an SQL Data Service and loads files from /src/main/resources
*
* @param args
* @throws Exception
*/
public static void main(final String[] args) throws Exception {
LOGGER.info(String.format("%1$s starting", LEAFStandaloneApp.class.getSimpleName()));
// Set up Caching Provider
System.setProperty("javax.cache.spi.CachingProvider",
"com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider");
com.github.benmanes.caffeine.jcache.spi.CaffeineCachingProvider;
IEventService eventService = new EventServiceSelector().getEventService();
// Create Hibernate Session Factory
SessionFactory sessionFactory = createFactory();
// Create Data Service SQL
IDataService dataService = DataServiceSql.newBuilder(eventService).withSessionFactory(sessionFactory).build();
// Load all contents from /src/main/resources
// Includes beanmetadata, dataobjects, lookuplists, and metadatatemplates
dataService.upsertResources(ResourceLocations.INSTANCE, Context.makeSystemContext());
// TODO: Set up REST calls to insert and retrieve data
}
/**
* Method to create a Hibernate Session Factory. <br>
* Based on code from {@link: HibernateSessionUtils}
*
* @return SessionFactory
*/
public static SessionFactory createFactory() {
Class<?>[] annotatedClasses = new Class<?>[] { 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 };
Configuration configuration = new Configuration();
Properties settings = new Properties();
settings.put(Environment.DRIVER, "org.postgresql.Driver");
settings.put(Environment.URL, "jdbc:postgresql://localhost:5432/leaf");
settings.put(Environment.USER, "Dhruti R-CTR Patel");
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 {
MetadataSources metadataSources = new MetadataSources(registry);
Arrays.stream(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;
}
}
}
Exception:
Caused by: org.postgresql.util.PSQLException: ERROR: relation “dataobject” already exists
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2553) ~[postgresql-42.2.19.jar:42.2.19]
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2285) ~[postgresql-42.2.19.jar:42.2.19]
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:323) ~[postgresql-42.2.19.jar:42.2.19]
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:481) ~[postgresql-42.2.19.jar:42.2.19]
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:401) ~[postgresql-42.2.19.jar:42.2.19]
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:164) ~[postgresql-42.2.19.jar:42.2.19]
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:130) ~[postgresql-42.2.19.jar:42.2.19]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
… 52 common frames omitted