'Eclipselink : can't create foreignkey constraint
Eclipselink (with Payara 5.2021.3) is not able to generate a foreignkey constraint if you add a foreignKey in the annotation @JoinColumn. It works fine without it.
Hibernate (Wildfly-25.0.1.Final) works fine with the annotation.
Is it a bug in EclipseLink ?
I use H2 database.
My properties in persistence.xml
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
<!-- <property name="javax.persistence.schema-generation.database.action" value="create" /> -->
<!-- Properties for Hibernate -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.jdbc.batch_size" value="25" />
<property name="hibernate.jdbc.time_zone" value="UTC"/>
<!-- <property name="hibernate.order_inserts" value="true" /> -->
<!-- <property name="hibernate.order_updates" value="true" /> -->
<property name="eclipselink.logging.level.sql" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.H2Platform"/>
</properties>
You get this exception :
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.7.7.payara-p3): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: java.lang.reflect.UndeclaredThrowableException
Error Code: 0
Call: ALTER TABLE Unite_Compte_SIX ADD CONSTRAINT FK_UniteCompteSIX_PlaceCotation FOREIGN KEY () REFERENCES ()
Query: DataModifyQuery(sql="ALTER TABLE Unite_Compte_SIX ADD CONSTRAINT FK_UniteCompteSIX_PlaceCotation FOREIGN KEY () REFERENCES ()")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:342)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:691)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:567)
at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2099)
at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:603)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:277)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:263)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:306)
at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:286)
at org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:87)
at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:911)
at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:3356)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1898)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1880)
at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1830)
at org.eclipse.persistence.internal.sessions.AbstractSession.priviledgedExecuteNonSelectingCall(AbstractSession.java:5223)
at org.eclipse.persistence.tools.schemaframework.TableDefinition.createForeignConstraintsOnDatabase(TableDefinition.java:896)
at org.eclipse.persistence.tools.schemaframework.SchemaManager.createForeignConstraints(SchemaManager.java:194)
at org.eclipse.persistence.tools.schemaframework.TableCreator.createConstraints(TableCreator.java:120)
at org.eclipse.persistence.tools.schemaframework.TableCreator.createTables(TableCreator.java:186)
at org.eclipse.persistence.tools.schemaframework.TableCreator.createTables(TableCreator.java:151)
at org.eclipse.persistence.tools.schemaframework.TableCreator.createTables(TableCreator.java:143)
at org.eclipse.persistence.tools.schemaframework.SchemaManager.createDefaultTables(SchemaManager.java:1030)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.generateDefaultTables(EntityManagerFactoryProvider.java:110)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDLToDatabase(EntityManagerSetupImpl.java:4450)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeMetadataDDLToDatabase(EntityManagerSetupImpl.java:4517)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDL(EntityManagerSetupImpl.java:4416)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDL(EntityManagerSetupImpl.java:4296)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:819)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:222)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:200)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getDatabaseSession(EntityManagerFactoryImpl.java:542)
at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactoryImpl(PersistenceProvider.java:388)
at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:316)
at org.glassfish.persistence.jpa.PersistenceUnitLoader.loadPU(PersistenceUnitLoader.java:207)
at org.glassfish.persistence.jpa.PersistenceUnitLoader.<init>(PersistenceUnitLoader.java:114)
at org.glassfish.persistence.jpa.JPADeployer$1.visitPUD(JPADeployer.java:267)
at org.glassfish.persistence.jpa.JPADeployer$PersistenceUnitDescriptorIterator.iteratePUDs(JPADeployer.java:571)
at org.glassfish.persistence.jpa.JPADeployer.createEMFs(JPADeployer.java:286)
at org.glassfish.persistence.jpa.JPADeployer.prepare(JPADeployer.java:183)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepareModule(ApplicationLifecycle.java:1131)
at com.sun.enterprise.v3.server.ApplicationLifecycle.prepare(ApplicationLifecycle.java:504)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:576)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:556)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:552)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/javax.security.auth.Subject.doAs(Subject.java:361)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:551)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:582)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$3.run(CommandRunnerImpl.java:574)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/javax.security.auth.Subject.doAs(Subject.java:361)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:573)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1497)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1300(CommandRunnerImpl.java:120)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1879)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1755)
at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:272)
at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:240)
at org.glassfish.admin.rest.utils.ResourceUtil.runCommand(ResourceUtil.java:294)
at org.glassfish.admin.rest.resources.TemplateListOfResource.createResource(TemplateListOfResource.java:136)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:167)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:176)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:79)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:469)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:391)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:80)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:253)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
at org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpContainer.service(GrizzlyHttpContainer.java:356)
at org.glassfish.admin.rest.adapter.RestAdapter$2.service(RestAdapter.java:335)
at org.glassfish.admin.rest.adapter.RestAdapter.service(RestAdapter.java:189)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:520)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:217)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.sql.SQLException: java.lang.reflect.UndeclaredThrowableException
at com.sun.gjc.spi.jdbc40.ProfiledConnectionWrapper40.prepareStatement(ProfiledConnectionWrapper40.java:256)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1595)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.prepareStatement(DatabaseAccessor.java:1544)
at org.eclipse.persistence.internal.databaseaccess.DatabaseCall.prepareStatement(DatabaseCall.java:806)
at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:628)
... 102 more
Caused by: java.lang.reflect.UndeclaredThrowableException
at com.sun.proxy.$Proxy472.prepareStatement(Unknown Source)
at com.sun.gjc.spi.base.ConnectionHolder.prepareStatement(ConnectionHolder.java:609)
at com.sun.gjc.spi.jdbc40.ProfiledConnectionWrapper40.prepareCachedStatement(ProfiledConnectionWrapper40.java:386)
at com.sun.gjc.spi.jdbc40.ProfiledConnectionWrapper40.prepareCachedStatement(ProfiledConnectionWrapper40.java:67)
at com.sun.gjc.spi.ManagedConnectionImpl.prepareCachedStatement(ManagedConnectionImpl.java:1080)
at com.sun.gjc.spi.jdbc40.ProfiledConnectionWrapper40.prepareStatement(ProfiledConnectionWrapper40.java:252)
... 106 more
Caused by: java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.GeneratedMethodAccessor133.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.sun.gjc.spi.JdbcObjectsFactory$1.invoke(JdbcObjectsFactory.java:143)
... 112 more
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Erreur de syntaxe dans l'instruction SQL "ALTER TABLE UNITE_COMPTE_SIX ADD CONSTRAINT FK_UNITECOMPTESIX_PLACECOTATION FOREIGN KEY ()[*] REFERENCES () "; attendu "identifier"
Syntax error in SQL statement "ALTER TABLE UNITE_COMPTE_SIX ADD CONSTRAINT FK_UNITECOMPTESIX_PLACECOTATION FOREIGN KEY ()[*] REFERENCES () "; expected "identifier"; SQL statement:
ALTER TABLE Unite_Compte_SIX ADD CONSTRAINT FK_UniteCompteSIX_PlaceCotation FOREIGN KEY () REFERENCES () [42001-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:451)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427)
at org.h2.message.DbException.getSyntaxError(DbException.java:243)
at org.h2.command.Parser.readColumnIdentifier(Parser.java:4530)
at org.h2.command.Parser.parseIndexColumnList(Parser.java:1321)
at org.h2.command.Parser.parseAlterTableAddConstraintIf(Parser.java:7717)
at org.h2.command.Parser.parseAlterTable(Parser.java:7204)
at org.h2.command.Parser.parseAlter(Parser.java:6546)
at org.h2.command.Parser.parsePrepared(Parser.java:828)
at org.h2.command.Parser.parse(Parser.java:788)
at org.h2.command.Parser.parse(Parser.java:760)
at org.h2.command.Parser.prepareCommand(Parser.java:683)
at org.h2.engine.Session.prepareLocal(Session.java:627)
at org.h2.server.TcpServerThread.process(TcpServerThread.java:270)
at org.h2.server.TcpServerThread.run(TcpServerThread.java:175)
at java.base/java.lang.Thread.run(Thread.java:834)
at org.h2.engine.SessionRemote.done(SessionRemote.java:629)
at org.h2.command.CommandRemote.prepare(CommandRemote.java:83)
at org.h2.command.CommandRemote.<init>(CommandRemote.java:49)
at org.h2.engine.SessionRemote.prepareCommand(SessionRemote.java:499)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1204)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:73)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:677)
... 116 more
]]
Here is my entity :
@Audited
@Entity
@Table(name="Unite_Compte_SIX"
, uniqueConstraints= {@UniqueConstraint(columnNames={"isin"}, name="IDX_UniteCompteSIX_ISIN")}
, indexes= {
@Index(name="IDX_UniteCompteSIX_Label", columnList="label"),
@Index(name="IDX_UniteCompteSIX_NatureTitre", columnList="nature_titre"),
@Index(name="IDX_UniteCompteSIX_FreqValo", columnList="frequence_valorisation"),
@Index(name="IDX_UniteCompteSIX_SRRI", columnList="srri"),
@Index(name="IDX_UniteCompteSIX_Category", columnList="category"),
@Index(name="IDX_UniteCompteSIX_SFDR", columnList="sfdr"),
@Index(name="IDX_UniteCompteSIX_ESG_Categ_G", columnList="esg_categ_german_market"),
@Index(name="IDX_UniteCompteSIX_ESG_Focus_T", columnList="esg_focus_type"),
@Index(name="IDX_UniteCompteSIX_AmfDoctrine", columnList="amf_doctrine"),
@Index(name="IDX_UniteCompteSIX_IsChanged", columnList="is_changed"),
}
)
public class UniteCompteSIX implements Serializable, HasIdCode, Cloneable {
private static final long serialVersionUID = 1L;
@Version
@DiffIgnore
@Column(name="optlock", nullable=false)
private long version;
@Id
@Column(name="unite_compte_six_id")
private Long id;
@OneToOne(fetch=FetchType.LAZY)
@ShallowReference
@MapsId
@JoinColumn(name="unite_compte_six_id", foreignKey = @ForeignKey(name="FK_UniteCompteSIX_UniteCompte"))
@NotNull
private UniteCompte uniteCompte;
@Column(name="is_changed", nullable=false)
private boolean isChanged;
@ManyToOne(fetch=FetchType.LAZY)
@ShallowReference
@JoinColumn(name="societe_gestion_six_id", foreignKey = @ForeignKey(name="FK_UniteCompteSIX_SocieteGestionSIX"))
private SocieteGestionSIX societeGestion;
@Column(name="label", nullable=false)
@NotBlank
@Size(max=30)
private String label;
@Column(name="label_long")
@Size(max=46)
private String labelLong;
@Column(name="isin", nullable=false)
@Size(min=12, max=12)
@gbt.validation.ISIN
@NotBlank
@Pattern(regexp = ISIN.PATTERN_ISIN_FULL)
private String isin;
@Column(name="nature_titre", nullable=false, length=4)
@NotNull
@Convert(converter=gbt.uc.six.model.converter.NatureTitreConverter.class)
private NatureTitre natureTitre = NatureTitre.UNKNWN;
@Column(name="rate_emission", precision=9, scale=5, nullable=false)
@NotNull
@Convert(converter=gbt.model.converter.RateBDConverter.class)
private RateBD rateEmission = RateBD.ZERO;
@Column(name="rate_rachat", nullable=false, precision=9, scale=5)
@Convert(converter=gbt.model.converter.RateBDConverter.class)
@NotNull
private RateBD rateRachat = RateBD.ZERO;
@Column(name="rate_gestion_year", precision=9, scale=5, nullable=false)
@Convert(converter=gbt.model.converter.RateBDConverter.class)
@NotNull
private RateBD rateGestionYear = RateBD.ZERO;
@Column(name="frequence_valorisation", nullable=false, length=4)
@NotNull
@Convert(converter=gbt.uc.six.model.converter.FrequenceValorisationConverter.class)
private FrequenceValorisation frequenceValorisation = FrequenceValorisation.UNKNWN;
//can be null
@Column(name="srri", length=4)
@Convert(converter=gbt.uc.six.model.converter.SRRIConverter.class)
private SRRI srri;
@Column(name="min_duration", nullable=false)
@Size(max=3)
@NotNull
private String minDuration = "0";
@Column(name="category", nullable=false, length=5)
@NotNull
@Convert(converter=gbt.uc.six.model.converter.NlleClassifEPTypeConverter.class)
private NlleClassifEPType category = NlleClassifEPType.UNKNWN;
@Column(name="rate_comm_perf", nullable=false, precision=12, scale=8)
@Convert(converter=gbt.model.converter.RateBDConverter.class)
@NotNull
private RateBD rateCommPerf = RateBD.ZERO;
@Column(name="sfdr", nullable=false, length=2)
@NotNull
@Convert(converter=gbt.uc.six.model.converter.SFDRClassificationConverter.class)
private SFDRClassification sfdr = SFDRClassification.UNKNWN;
@Column(name="esg_categ_german_market", nullable=false, length=2)
@Convert(converter=gbt.uc.six.model.converter.ESGCategGermanMarketConverter.class)
@NotNull
private ESGCategGermanMarket esgCategGermanMarket = ESGCategGermanMarket.UNKNWN;
@Column(name="esg_focus_type", nullable=false, length=2)
@Convert(converter=gbt.uc.six.model.converter.ESGFocusTypeConverter.class)
@NotNull
private ESGFocusType esgFocusType = ESGFocusType.UNKNWN;
@Column(name="amf_doctrine", nullable=false, length=2)
@Convert(converter=gbt.uc.six.model.converter.AMFDoctrineConverter.class)
@NotNull
private AMFDoctrine amfDoctrine = AMFDoctrine.UNKNWN;
@Column(name="esg_labels")
@Size(max=30)
private String esgLabels;
@ManyToOne(fetch=FetchType.LAZY)
@ShallowReference
@JoinColumn(name="place_cotation_id", foreignKey = @ForeignKey(name="FK_UniteCompteSIX_PlaceCotation"))
private PlaceCotation placeCotation;
}
Here is the result. You can see that the foreign key constraints are missing :
-- Drop table
-- DROP TABLE PUBLIC.UNITE_COMPTE_SIX;
CREATE TABLE PUBLIC.UNITE_COMPTE_SIX (
AMF_DOCTRINE VARCHAR(2) NOT NULL,
CATEGORY VARCHAR(5) NOT NULL,
ESG_CATEG_GERMAN_MARKET VARCHAR(2) NOT NULL,
ESG_FOCUS_TYPE VARCHAR(2) NOT NULL,
ESG_LABELS VARCHAR,
FREQUENCE_VALORISATION VARCHAR(4) NOT NULL,
UNITE_COMPTE_SIX_ID BIGINT NOT NULL,
IS_CHANGED BOOLEAN NOT NULL,
ISIN VARCHAR NOT NULL,
LABEL VARCHAR NOT NULL,
LABEL_LONG VARCHAR,
MIN_DURATION VARCHAR NOT NULL,
NATURE_TITRE VARCHAR(4) NOT NULL,
RATE_COMM_PERF DECIMAL(12,8) NOT NULL,
RATE_EMISSION DECIMAL(9,5) NOT NULL,
RATE_GESTION_YEAR DECIMAL(9,5) NOT NULL,
RATE_RACHAT DECIMAL(9,5) NOT NULL,
SFDR VARCHAR(2) NOT NULL,
SRRI VARCHAR(4),
OPTLOCK BIGINT NOT NULL,
PLACE_COTATION_ID BIGINT,
SOCIETE_GESTION_SIX_ID BIGINT,
CONSTRAINT CONSTRAINT_4F PRIMARY KEY (UNITE_COMPTE_SIX_ID)
);
CREATE INDEX IDX_UNITECOMPTESIX_AMFDOCTRINE ON PUBLIC.UNITE_COMPTE_SIX (AMF_DOCTRINE);
CREATE INDEX IDX_UNITECOMPTESIX_CATEGORY ON PUBLIC.UNITE_COMPTE_SIX (CATEGORY);
CREATE INDEX IDX_UNITECOMPTESIX_ESG_CATEG_G ON PUBLIC.UNITE_COMPTE_SIX (ESG_CATEG_GERMAN_MARKET);
CREATE INDEX IDX_UNITECOMPTESIX_ESG_FOCUS_T ON PUBLIC.UNITE_COMPTE_SIX (ESG_FOCUS_TYPE);
CREATE INDEX IDX_UNITECOMPTESIX_FREQVALO ON PUBLIC.UNITE_COMPTE_SIX (FREQUENCE_VALORISATION);
CREATE INDEX IDX_UNITECOMPTESIX_ISCHANGED ON PUBLIC.UNITE_COMPTE_SIX (IS_CHANGED);
CREATE UNIQUE INDEX IDX_UNITECOMPTESIX_ISIN_INDEX_4 ON PUBLIC.UNITE_COMPTE_SIX (ISIN);
CREATE INDEX IDX_UNITECOMPTESIX_LABEL ON PUBLIC.UNITE_COMPTE_SIX (LABEL);
CREATE INDEX IDX_UNITECOMPTESIX_NATURETITRE ON PUBLIC.UNITE_COMPTE_SIX (NATURE_TITRE);
CREATE INDEX IDX_UNITECOMPTESIX_SFDR ON PUBLIC.UNITE_COMPTE_SIX (SFDR);
CREATE INDEX IDX_UNITECOMPTESIX_SRRI ON PUBLIC.UNITE_COMPTE_SIX (SRRI);
CREATE UNIQUE INDEX PRIMARY_KEY_4F ON PUBLIC.UNITE_COMPTE_SIX (UNITE_COMPTE_SIX_ID);
If I remove the foreign key name it works. For example :
@ManyToOne(fetch=FetchType.LAZY)
@ShallowReference
@JoinColumn(name="societe_gestion_six_id")
private SocieteGestionSIX societeGestion;
you get :
-- Drop table
-- DROP TABLE PUBLIC.UNITE_COMPTE_SIX;
CREATE TABLE PUBLIC.UNITE_COMPTE_SIX (
AMF_DOCTRINE VARCHAR(2) NOT NULL,
CATEGORY VARCHAR(5) NOT NULL,
ESG_CATEG_GERMAN_MARKET VARCHAR(2) NOT NULL,
ESG_FOCUS_TYPE VARCHAR(2) NOT NULL,
ESG_LABELS VARCHAR,
FREQUENCE_VALORISATION VARCHAR(4) NOT NULL,
UNITE_COMPTE_SIX_ID BIGINT NOT NULL,
IS_CHANGED BOOLEAN NOT NULL,
ISIN VARCHAR NOT NULL,
LABEL VARCHAR NOT NULL,
LABEL_LONG VARCHAR,
MIN_DURATION VARCHAR NOT NULL,
NATURE_TITRE VARCHAR(4) NOT NULL,
RATE_COMM_PERF DECIMAL(12,8) NOT NULL,
RATE_EMISSION DECIMAL(9,5) NOT NULL,
RATE_GESTION_YEAR DECIMAL(9,5) NOT NULL,
RATE_RACHAT DECIMAL(9,5) NOT NULL,
SFDR VARCHAR(2) NOT NULL,
SRRI VARCHAR(4),
OPTLOCK BIGINT NOT NULL,
PLACE_COTATION_ID BIGINT,
SOCIETE_GESTION_SIX_ID BIGINT,
CONSTRAINT CONSTRAINT_4F PRIMARY KEY (UNITE_COMPTE_SIX_ID),
CONSTRAINT FK_UNITE_COMPTE_SIX_PLACE_COTATION_ID FOREIGN KEY (PLACE_COTATION_ID) REFERENCES PUBLIC.PLACE_COTATIONS(PLACE_COTATION_ID) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT FK_UNITE_COMPTE_SIX_SOCIETE_GESTION_SIX_ID FOREIGN KEY (SOCIETE_GESTION_SIX_ID) REFERENCES PUBLIC.SOCIETE_GESTION_SIX(SOCIETE_GESTION_SIX_ID) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT FK_UNITE_COMPTE_SIX_UNITE_COMPTE_SIX_ID FOREIGN KEY (UNITE_COMPTE_SIX_ID) REFERENCES PUBLIC.UNITE_COMPTES(UNITE_COMPTE_ID) ON DELETE RESTRICT ON UPDATE RESTRICT
);
CREATE INDEX FK_UNITE_COMPTE_SIX_PLACE_COTATION_ID_INDEX_4 ON PUBLIC.UNITE_COMPTE_SIX (PLACE_COTATION_ID);
CREATE INDEX FK_UNITE_COMPTE_SIX_SOCIETE_GESTION_SIX_ID_INDEX_4 ON PUBLIC.UNITE_COMPTE_SIX (SOCIETE_GESTION_SIX_ID);
CREATE INDEX IDX_UNITECOMPTESIX_AMFDOCTRINE ON PUBLIC.UNITE_COMPTE_SIX (AMF_DOCTRINE);
CREATE INDEX IDX_UNITECOMPTESIX_CATEGORY ON PUBLIC.UNITE_COMPTE_SIX (CATEGORY);
CREATE INDEX IDX_UNITECOMPTESIX_ESG_CATEG_G ON PUBLIC.UNITE_COMPTE_SIX (ESG_CATEG_GERMAN_MARKET);
CREATE INDEX IDX_UNITECOMPTESIX_ESG_FOCUS_T ON PUBLIC.UNITE_COMPTE_SIX (ESG_FOCUS_TYPE);
CREATE INDEX IDX_UNITECOMPTESIX_FREQVALO ON PUBLIC.UNITE_COMPTE_SIX (FREQUENCE_VALORISATION);
CREATE INDEX IDX_UNITECOMPTESIX_ISCHANGED ON PUBLIC.UNITE_COMPTE_SIX (IS_CHANGED);
CREATE UNIQUE INDEX IDX_UNITECOMPTESIX_ISIN_INDEX_4 ON PUBLIC.UNITE_COMPTE_SIX (ISIN);
CREATE INDEX IDX_UNITECOMPTESIX_LABEL ON PUBLIC.UNITE_COMPTE_SIX (LABEL);
CREATE INDEX IDX_UNITECOMPTESIX_NATURETITRE ON PUBLIC.UNITE_COMPTE_SIX (NATURE_TITRE);
CREATE INDEX IDX_UNITECOMPTESIX_SFDR ON PUBLIC.UNITE_COMPTE_SIX (SFDR);
CREATE INDEX IDX_UNITECOMPTESIX_SRRI ON PUBLIC.UNITE_COMPTE_SIX (SRRI);
CREATE UNIQUE INDEX PRIMARY_KEY_4F ON PUBLIC.UNITE_COMPTE_SIX (UNITE_COMPTE_SIX_ID);
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
