openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ben short" <jamin.sh...@gmail.com>
Subject Re: @UniqueConstraint annotation
Date Tue, 28 Aug 2007 21:33:38 GMT
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 <plinskey@gmail.com> 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 <plunchete@gmail.com> wrote:
> > Hi,
> >
> > Regarding the documentation about OpenJPA you can define a unique column
> > with something like that:
> >
> > @Entity
> > @Table(name="ART", uniqueConstraints=@Unique(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 <jamin.short@gmail.com> 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
>

Mime
View raw message