I missed that while looking at the code. Thanks for the clarification.
Ben On 8/28/07, Patrick Linskey <[EMAIL PROTECTED]> wrote: > Ah. I think that that's exactly how it is right now in what I implemented, > except that the concrete DBDictionaries override a method instead of setting > a property. The base impl just returns the default supportsUniqueConstraints > value, but for example, PostgresDictionary overrides > supportsDeferredUniqueConstraints() to simply return false. > > -Patrick > > On 8/28/07, ben short <[EMAIL PROTECTED]> wrote: > > > > Sure, but I meant for the foreignKeyDeferable and uniqueDeferable etc > > to be hard coded with the capabilities of the db. > > > > Ben > > > > On 8/28/07, Patrick Linskey <[EMAIL PROTECTED]> wrote: > > > (In general, I prefer it if we can just make the Right Choice in the > > > first place, and not make the user need to decide how to configure > > > things.) > > > > > > -Patrick > > > > > > On 8/28/07, Patrick Linskey <[EMAIL PROTECTED]> wrote: > > > > I thought about that, but figured that this is something that is > > really > > > > probably DB pretty DB-specific, so it seemed acceptable to make it a > > > > hard-coded-per-db constant, rather than a configuration-accessible > > setting. > > > > > > > > The advantage of my approach is that it does not remove the current > > > > supportsDeferrableConstraints setting, so there is no backwards-compat > > > > issue. If we introduced two new settings, then we'd need to decide > > what to > > > > do if supportsDeferrableConstraints and one of the new settings were > > in > > > > conflict. > > > > > > > > Certainly we could add a configuration-accessible setting if the need > > > > arises, though. > > > > > > > > > > > > -Patrick > > > > > > > > On 8/28/07, ben short < [EMAIL PROTECTED]> wrote: > > > > > Patrick, > > > > > > > > > > Maybe the property should be re factored to allow it to be > > true/false > > > > > per constraint type, foreignKeyDeferable, uniqueDeferable etc? > > > > > > > > > > Ben > > > > > > > > > > On 8/28/07, Patrick Linskey <[EMAIL PROTECTED]> wrote: > > > > > > That sounds like > > > > https://issues.apache.org/jira/browse/OPENJPA-282 > > > > > > > > > > > > It should be a trivial fix; we just need to update our Postgres > > > > > > DBDictionary. > > > > > > > > > > > > -Patrick > > > > > > > > > > > > On 8/28/07, ben short < [EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > I have upgraded to 1.0.0-SNAPSHOT and see a different error.. > > > > > > > > > > > > > > 31 openjpa INFO [main] openjpa.Runtime - Starting OpenJPA > > > > > > > 1.0.0-SNAPSHOT > > > > > > > 469 openjpa TRACE [main] openjpa.jdbc.SQL - <t 6206601, conn > > > > > > > 27182317> executing prepstmnt 23103355 SELECT NULL AS > > SEQUENCE_SCHEMA, > > > > > > > relname AS SEQUENCE_NAME FROM pg_class WHERE relkind='S' > > > > > > > 469 openjpa TRACE [main] openjpa.jdbc.SQL - <t 6206601, conn > > > > > > > 27182317> [0 ms] spent > > > > > > > 484 openjpa TRACE [main] openjpa.jdbc.SQL - <t 6206601, conn > > > > > > > 25086455> executing stmnt 3874616 CREATE TABLE AttributeAndValue > > (id > > > > > > > BIGSERIAL NOT NULL, mAttribute VARCHAR(255), mValue > > VARCHAR(255), > > > > > > > version INTEGER, mProductInstance BYTEA, PRIMARY KEY (id), > > UNIQUE > > > > > > > (mAttribute, mValue) DEFERRABLE) > > > > > > > 484 openjpa TRACE [main] openjpa.jdbc.SQL - <t 6206601, conn > > > > > > > 25086455> [0 ms] spent > > > > > > > Exception in thread "main" <openjpa-1.0.0-SNAPSHOT-r420667:564688 > > > > > > > nonfatal general error> > > > > > > > org.apache.openjpa.persistence.PersistenceException: > > > > ERROR: syntax > > > > > > > error at or near "DEFERRABLE" {stmnt 3874616 CREATE TABLE > > > > > > > AttributeAndValue (id BIGSERIAL NOT NULL, mAttribute > > VARCHAR(255), > > > > > > > mValue VARCHAR(255), version INTEGER, mProductInstance BYTEA, > > PRIMARY > > > > > > > KEY (id), UNIQUE (mAttribute, mValue) DEFERRABLE)} [code=0, > > > > > > > state=42601] > > > > > > > at > > > > org.apache.openjpa.jdbc.meta.MappingTool.record ( > > > > > > > MappingTool.java:549) > > > > > > > at > > > > org.apache.openjpa.jdbc.meta.MappingTool.record( > > > > > > > MappingTool.java:449) > > > > > > > at > > > > > > > > > > > org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings > > > > ( > > > > > > > JDBCBrokerFactory.java:170) > > > > > > > at > > > > org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl( > > > > > > > JDBCBrokerFactory.java:130) > > > > > > > at > > > > org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker > > > > ( > > > > > > > AbstractBrokerFactory.java:186) > > > > > > > at > > > > org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker( > > > > > > > DelegatingBrokerFactory.java:142) > > > > > > > at > > > > > > > > > > > > > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager > > > > > > > (EntityManagerFactoryImpl.java:190) > > > > > > > at > > > > > > > > > > > > > org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager > > > > > > > (EntityManagerFactoryImpl.java:143) > > > > > > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > > > > > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke( > > > > > > > NativeMethodAccessorImpl.java:39) > > > > > > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke ( > > > > > > > DelegatingMethodAccessorImpl.java:25) > > > > > > > at java.lang.reflect.Method.invoke(Method.java:597) > > > > > > > at > > > > > > > > > > > > > org.springframework.orm.jpa.AbstractEntityManagerFactoryBean$ManagedEntityManagerFactoryInvocationHandler.invoke > > > > > > > (AbstractEntityManagerFactoryBean.java:375) > > > > > > > at $Proxy0.createEntityManager(Unknown > > > > Source) > > > > > > > at > > > > com.daisytechnologies.jpatest.Main.insert(Main.java:45) > > > > > > > at > > > > com.daisytechnologies.jpatest.Main.main(Main.java:39) > > > > > > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > > > > > > > at > > > > sun.reflect.NativeMethodAccessorImpl.invoke( > > > > > > > NativeMethodAccessorImpl.java :39) > > > > > > > at > > > > sun.reflect.DelegatingMethodAccessorImpl.invoke( > > > > > > > DelegatingMethodAccessorImpl.java:25) > > > > > > > at java.lang.reflect.Method.invoke(Method.java:597) > > > > > > > at > > > > com.intellij.rt.execution.application.AppMain.main(AppMain.java > > > > > > > :90) > > > > > > > Caused by: > > > > org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: > > > > > > > syntax error at or near "DEFERRABLE" {stmnt 3874616 CREATE TABLE > > > > > > > AttributeAndValue (id BIGSERIAL NOT NULL, mAttribute > > VARCHAR(255), > > > > > > > mValue VARCHAR(255), version INTEGER, mProductInstance BYTEA, > > PRIMARY > > > > > > > KEY (id), UNIQUE (mAttribute, mValue) DEFERRABLE)} [code=0, > > > > > > > state=42601] > > > > > > > at > > > > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap( > > > > > > > LoggingConnectionDecorator.java:192) > > > > > > > at > > > > > > > > > > > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$800 > > > > ( > > > > > > > LoggingConnectionDecorator.java:57) > > > > > > > at > > > > > > > > > > > > > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingStatement.executeUpdate > > > > > > > (LoggingConnectionDecorator.java :754) > > > > > > > at > > > > org.apache.openjpa.lib.jdbc.DelegatingStatement.executeUpdate( > > > > > > > DelegatingStatement.java:114) > > > > > > > at > > > > org.apache.openjpa.jdbc.schema.SchemaTool.executeSQL( > > > > > > > SchemaTool.java:1185) > > > > > > > at > > > > org.apache.openjpa.jdbc.schema.SchemaTool.createTable( > > > > > > > SchemaTool.java:949) > > > > > > > at > > > > org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java > > > > > > > :526) > > > > > > > at > > > > org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java > > > > > > > :344) > > > > > > > at > > > > org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java > > > > > > > :321) > > > > > > > at > > > > org.apache.openjpa.jdbc.meta.MappingTool.record( > > > > > > > MappingTool.java:497) > > > > > > > ... 20 more > > > > > > > > > > > > > > Im using Postgres version 8.1 with Postgres Jdbc driver version > > > > > > > 8.1-408.jdbc3. > > > > > > > > > > > > > > Heres the sql, > > > > > > > > > > > > > > CREATE TABLE AttributeAndValue (id BIGSERIAL NOT NULL, > > mAttribute > > > > > > > VARCHAR(255), mValue VARCHAR(255), version INTEGER, > > mProductInstance > > > > > > > BYTEA, PRIMARY KEY (id), UNIQUE (mAttribute, mValue) DEFERRABLE) > > > > > > > > > > > > > > if I remove the DEFERRABLE then the ddl executes without errors. > > > > > > > > > > > > > > The Postgres 8.1 docs [1] say.. > > > > > > > > > > > > > > DEFERRABLE > > > > > > > NOT DEFERRABLE > > > > > > > > > > > > > > This controls whether the constraint can be deferred. A > > constraint > > > > > > > that is not deferrable will be checked immediately after every > > > > > > > command. Checking of constraints that are deferrable may be > > postponed > > > > > > > until the end of the transaction (using the SET CONSTRAINTS > > command). > > > > > > > NOT DEFERRABLE is the default. Only foreign key constraints > > currently > > > > > > > accept this clause. All other constraint types are not > > deferrable. > > > > > > > > > > > > > > Regards > > > > > > > > > > > > > > Ben > > > > > > > > > > > > > > On 8/28/07, Patrick Linskey < [EMAIL PROTECTED]> wrote: > > > > > > > > Hi, > > > > > > > > > > > > > > > > I think that this is actually a limitation of OpenJPA > > currently -- > > > > > > > > OpenJPA ignores unique constraints and some (most?) index > > > > definitions > > > > > > > > when generating a schema. > > > > > > > > > > > > > > > > Could you attach the full stack trace to > > > > > > > > https://issues.apache.org/jira/browse/OPENJPA-340 > > > > please? It'll be > > > > > > > > useful for resolving the issue. > > > > > > > > > > > > > > > > -Patrick > > > > > > > > > > > > > > > > On 8/28/07, Ignacio Andreu < [EMAIL PROTECTED]> wrote: > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > Regarding the documentation about OpenJPA you can define a > > unique > > > > > > > column > > > > > > > > > with something like that: > > > > > > > > > > > > > > > > > > @Entity > > > > > > > > > @Table(name="ART", > > > > [EMAIL PROTECTED](columnNames="TITLE")) > > > > > > > > > public class Article { > > > > > > > > > ... > > > > > > > > > } > > > > > > > > > > > > > > > > > > And in XML > > > > > > > > > > > > > > > > > > <entity class="org.mag.Article"> > > > > > > > > > <table name="ART"> > > > > > > > > > <unique-constraint> > > > > > > > > > <column-name>TITLE</column-name> > > > > > > > > > </unique-constraint> > > > > > > > > > </table> > > > > > > > > > ... > > > > > > > > > </entity> > > > > > > > > > > > > > > > > > > For more information see the "Unique Constraints" section > > [1] > > > > > > > > > > > > > > > > > > - Ignacio > > > > > > > > > > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > > > > > > > > > http://openjpa.apache.org/docs/latest/manual/manual.html#jpa_overview_mapping_unq > > > > > > > > > > > > > > > > > > On 8/28/07, ben short <[EMAIL PROTECTED]> wrote: > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > > > I am trying to use the @UniqueConstraint annotation but > > get the > > > > > > > > > > following error message.. > > > > > > > > > > > > > > > > > > > > OpenJPA does not yet support the @UniqueConstraint > > annotation. > > > > > > > > > > > > > > > > > > > > Is that any plan to implement this feature in the near > > future? > > > > Can I > > > > > > > > > > define the mapping for the class that I'm trying to > > annotate in > > > > xml > > > > > > > > > > rather than use the annotations to use the > > UniqueConstraint > > > > feature? > > > > > > > > > > > > > > > > > > > > Regards > > > > > > > > > > > > > > > > > > > > Ben Short > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > Patrick Linskey > > > > > > > > 202 669 5907 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Patrick Linskey > > > > > > 202 669 5907 > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > Patrick Linskey > > > > 202 669 5907 > > > > > > > > > -- > > > Patrick Linskey > > > 202 669 5907 > > > > > > > > > -- > Patrick Linskey > 202 669 5907 >