Hello derbyusers

I'm using an in-memory derby 10.6.1 db for our testng tests to run against with the ddl-generation flag set. The persistenceprovider is eclipselink 2.0.2. It's working fine as long in every entity used the catalog attribute is defined, for example:
@Entity
@Table(name = "KHH_BFS_MUNICIPALITY", catalog="KHH")
public class KhhBfsMunicipality implements java.io.Serializable

If I remove this, and I have to because not every DB Schema is named khh but maybe also name khh_prod or whatever, the derby startup fails with the following error:

[EL Warning]: 2010-07-15 08:14:27.781--ServerSession(14298351)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: java.sql.SQLException: Constraint 'KHHBFSMNCNTNBBRVTN' is invalid: there is no unique or primary key constraint on table '"APP"."KHH_BFS_CANTON"' that matches the number and types of the columns in the foreign key.
Error Code: 30000
Call: ALTER TABLE KHH_BFS_MUNICIPALITY ADD CONSTRAINT KHHBFSMNCNTNBBRVTN FOREIGN KEY (CANTON_ABBREVIATION) REFERENCES KHH_BFS_CANTON (CANTON_ABBREVIAT
ION)
Query: DataModifyQuery(sql="ALTER TABLE KHH_BFS_MUNICIPALITY ADD CONSTRAINT KHHBFSMNCNTNBBRVTN FOREIGN KEY (CANTON_ABBREVIATION) REFERENCES KHH_BFS_CA
NTON (CANTON_ABBREVIATION)")


Any hints to solve this problem apart from manually editing the ddl-jdbc code and hardcoding it into the tests?

I added also the persistence xml and the generated ddl code (without the catalog set)



persistence.xml
 <persistence-unit name="KHHTEST" transaction-type="RESOURCE_LOCAL">
   <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
...
   <class>ch.glue.bfs.system.khh.ejb.entities.KhhBfsMunicipality</class>
....
   <exclude-unlisted-classes>true</exclude-unlisted-classes>
   <properties>
<property name="eclipselink.jdbc.platform" value="org.eclipse.persistence.platform.database.DerbyPlatform"/> <property name="javax.persistence.jdbc.url" value="jdbc:derby:memory:khh;create=true"/> <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" /> <property name="eclipselink.target-database" value="Derby"/> <property name="javax.persistence.jdbc.user" value="" />
       <property name="javax.persistence.jdbc.password" value="" />
       <!-- EclipseLink should create the database schema automatically -->
       <property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="both"/>
   </properties>
</persistence-unit>

generated ddl:
CREATE TABLE KHH_BFS_MUNICIPALITY (MUNICIPALITY_ID INTEGER NOT NULL, MUNICIPALITY_NAME VARCHAR(40) NOT NULL, CANTON_ABBREVIATION VARCHAR(255) NOT NULL, PRIMARY KEY (MUNICIPALITY_ID))
...
ALTER TABLE KHH_BFS_MUNICIPALITY ADD CONSTRAINT KHHBFSMNCNTNBBRVTN FOREIGN KEY (CANTON_ABBREVIATION) REFERENCES KHH_BFS_CANTON (CANTON_ABBREVIATION)

greetings

thierry

Reply via email to