You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Peter Henderson <pe...@starjar.com> on 2009/05/14 00:26:25 UTC

@GeneratedValue and schemas

I've an entity bean [1] which maps to a table [2] in a 
specific schema.
The entity bean has an Integer id column which is generated 
using a sequence. The database in question is Postgresql 8.3.x

When I used TopLinkEssentials I could specify
     @GeneratedValue(strategy = GenerationType.IDENTITY)
and the correct sequence was used 
"summary_charts.mappings_layout_chart_mapping_id_seq"

but...

using OpenJPA I get an exception saying sequence 
"mappings_layout_chart_mapping_id_seq" not being found [3]
is this a bug with OpenJPA in that it is not using the 
schema of the table or a bug in my code? Shouldn't OpenJpa 
be looking for a sequence called <schema name>.<table>_<id 
field name>_seq

e.g.
it should be looking for

summary_charts + "." +   // schema name
mappings "_"		 // table name
layout_chart_mapping_id "_seq" // column name

"summary_charts.mappings_layout_chart_mapping_id_seq"




In the mean time I have a work around using
@SequenceGenerator(
 
name="summary_charts.mappings_layout_chart_mapping_id_seq",
 
sequenceName="summary_charts.mappings_layout_chart_mapping_id_seq")

and
     @GeneratedValue(generator = 
"summary_charts.mappings_layout_chart_mapping_id_seq",
                     strategy = GenerationType.SEQUENCE)













Cheers

Peter.






[1] Entity bean
/**
  *
  * @author peter
  */
@Entity
@Table(name = "mappings", schema="summary_charts")
public class SummaryMapping implements Serializable  {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "layout_chart_mapping_id", nullable = false)
     private Integer mappingId;

.. SNIP other fields getters/setters/hashcode/equals/toString ..
}

[2] Database table
CREATE SCHEMA summary_charts;

CREATE TABLE summary_charts.mappings
(
   layout_chart_mapping_id serial NOT NULL,
   layout_id integer NOT NULL,
   chart_id integer NOT NULL,
   layout text NOT NULL,
   CONSTRAINT mappings_pkey PRIMARY KEY 
(layout_chart_mapping_id),
   CONSTRAINT mappings_chart_id_fkey FOREIGN KEY (chart_id)
       REFERENCES summary_charts.charts (chart_id) MATCH SIMPLE
       ON UPDATE NO ACTION ON DELETE NO ACTION,
   CONSTRAINT mappings_layout_id_fkey FOREIGN KEY (layout_id)
       REFERENCES summary_charts.layouts (layout_id) MATCH 
SIMPLE
       ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);
ALTER TABLE summary_charts.mappings OWNER TO dbadmin;



[3] Exception message
<openjpa-1.2.1-r752877:753278 fatal store error> 
org.apache.openjpa.persistence.RollbackException: The 
transaction has been rolled back.  See the nested exceptions 
for details on the errors that occurred.
         at 
org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
         at 
com.starjar.starjarenterprise5.api.ServiceBase.returnEntityManager(ServiceBase.java:98)
         at 
com.starjar.starjarenterprise5.api.SummaryChartService.createSummaryMapping(SummaryChartService.java:80)
         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.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:192)
         at 
com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:110)
         at 
com.caucho.hessian.server.HessianServlet.service(HessianServlet.java:416)
         at 
com.starjar.starjarenterprise5.api.ServiceBase.service(ServiceBase.java:107)
         at 
org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
         at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
         at 
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
         at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
         at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
         at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
         at 
com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
         at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
         at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
         at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
         at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
         at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
         at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
         at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
         at 
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
         at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
         at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
         at 
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
         at 
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
         at 
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
         at 
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
         at 
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
         at 
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
         at 
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
         at 
com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
         at 
com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
         at 
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Caused by: <openjpa-1.2.1-r752877:753278 fatal general 
error> org.apache.openjpa.persistence.PersistenceException: 
The transaction has been rolled back.  See the nested 
exceptions for details on the errors that occurred.
         at 
org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2163)
         at 
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010)
         at 
org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
         at 
org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679)
         at 
org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:989)
         at 
org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:592)
         at 
com.starjar.starjarenterprise5.service.helpers.SummaryApi.createSummaryMapping(SummaryApi.java:113)
         at 
com.starjar.starjarenterprise5.api.SummaryChartService.createSummaryMapping(SummaryChartService.java:77)
         ... 35 more
Caused by: <openjpa-1.2.1-r752877:753278 nonfatal general 
error> org.apache.openjpa.persistence.PersistenceException: 
ERROR: relation "mappings_layout_chart_mapping_id_seq" does 
not exist {prepstmnt 1646550480 SELECT 
CURRVAL('mappings_layout_chart_mapping_id_SEQ')} [code=0, 
state=42P01]
         at 
org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4232)
         at 
org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4197)
         at 
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
         at 
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
         at 
org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
         at 
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:74)
         at 
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
         at 
org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
         at 
org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
         at 
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
         at 
org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
         at 
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:717)
         at 
org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
         ... 42 more
Caused by: 
org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: 
relation "mappings_layout_chart_mapping_id_seq" does not 
exist {prepstmnt 1646550480 SELECT 
CURRVAL('mappings_layout_chart_mapping_id_SEQ')} [code=0, 
state=42P01]
         at 
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
         at 
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:57)
         at 
org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:852)
         at 
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262)
         at 
org.apache.openjpa.jdbc.sql.PostgresDictionary$PostgresPreparedStatement.executeQuery(PostgresDictionary.java:520)
         at 
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262)
         at 
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1595)
         at 
org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:252)
         at 
org.apache.openjpa.jdbc.sql.DBDictionary.executeQuery(DBDictionary.java:4453)
         at 
org.apache.openjpa.jdbc.sql.DBDictionary.getGeneratedKey(DBDictionary.java:4010)
         at 
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:98)
         at 
org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:72)
         ... 49 more






-- 
Peter Henderson
Director Starjar Limited.

Mobile: +44 (0) 778 233 8645
Email: peter.henderson@starjar.com
Web: www.starjar.com


Re: @GeneratedValue and schemas

Posted by MiƂosz Tylenda <mt...@o2.pl>.
Hi All,

I believe this bug has been addressed in JIRAs OPENJPA-557 and OPENJPA-582. Only not-yet-released OpenJPA versions 2.0 and 1.3 contain the fix but you will find a workaround in one of these JIRAs.

Cheers,
Milosz


> Hi Peter,
> I seem to remember some problem that Jeremy found with not processing the
> schema name for id generation.  But, maybe my memory isn't what it was...
> :-)  I'll copy Jeremy on this reply to see if this rings a bell with him.
> 
> Thanks,
> Kevin
> 
> On Wed, May 13, 2009 at 5:26 PM, Peter Henderson  wrote:
> 
> > I've an entity bean [1] which maps to a table [2] in a specific schema.
> > The entity bean has an Integer id column which is generated using a
> > sequence. The database in question is Postgresql 8.3.x
> >
> > When I used TopLinkEssentials I could specify
> >    @GeneratedValue(strategy = GenerationType.IDENTITY)
> > and the correct sequence was used
> > "summary_charts.mappings_layout_chart_mapping_id_seq"
> >
> > but...
> >
> > using OpenJPA I get an exception saying sequence
> > "mappings_layout_chart_mapping_id_seq" not being found [3]
> > is this a bug with OpenJPA in that it is not using the schema of the table
> > or a bug in my code? Shouldn't OpenJpa be looking for a sequence called
> > .__seq
> >
> > e.g.
> > it should be looking for
> >
> > summary_charts + "." +   // schema name
> > mappings "_"             // table name
> > layout_chart_mapping_id "_seq" // column name
> >
> > "summary_charts.mappings_layout_chart_mapping_id_seq"
> >
> >
> >
> >
> > In the mean time I have a work around using
> > @SequenceGenerator(
> >
> > name="summary_charts.mappings_layout_chart_mapping_id_seq",
> >
> > sequenceName="summary_charts.mappings_layout_chart_mapping_id_seq")
> >
> > and
> >    @GeneratedValue(generator =
> > "summary_charts.mappings_layout_chart_mapping_id_seq",
> >                    strategy = GenerationType.SEQUENCE)
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > Cheers
> >
> > Peter.
> >
> >
> >
> >
> >
> >
> > [1] Entity bean
> > /**
> >  *
> >  * @author peter
> >  */
> > @Entity
> > @Table(name = "mappings", schema="summary_charts")
> > public class SummaryMapping implements Serializable  {
> >    @Id
> >    @GeneratedValue(strategy = GenerationType.IDENTITY)
> >    @Column(name = "layout_chart_mapping_id", nullable = false)
> >    private Integer mappingId;
> >
> > .. SNIP other fields getters/setters/hashcode/equals/toString ..
> > }
> >
> > [2] Database table
> > CREATE SCHEMA summary_charts;
> >
> > CREATE TABLE summary_charts.mappings
> > (
> >  layout_chart_mapping_id serial NOT NULL,
> >  layout_id integer NOT NULL,
> >  chart_id integer NOT NULL,
> >  layout text NOT NULL,
> >  CONSTRAINT mappings_pkey PRIMARY KEY (layout_chart_mapping_id),
> >  CONSTRAINT mappings_chart_id_fkey FOREIGN KEY (chart_id)
> >      REFERENCES summary_charts.charts (chart_id) MATCH SIMPLE
> >      ON UPDATE NO ACTION ON DELETE NO ACTION,
> >  CONSTRAINT mappings_layout_id_fkey FOREIGN KEY (layout_id)
> >      REFERENCES summary_charts.layouts (layout_id) MATCH SIMPLE
> >      ON UPDATE NO ACTION ON DELETE NO ACTION
> > )
> > WITH (OIDS=FALSE);
> > ALTER TABLE summary_charts.mappings OWNER TO dbadmin;
> >
> >
> >
> > [3] Exception message
> > 
> > org.apache.openjpa.persistence.RollbackException: The transaction has been
> > rolled back.  See the nested exceptions for details on the errors that
> > occurred.
> >        at
> > org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
> >        at
> > com.starjar.starjarenterprise5.api.ServiceBase.returnEntityManager(ServiceBase.java:98)
> >        at
> > com.starjar.starjarenterprise5.api.SummaryChartService.createSummaryMapping(SummaryChartService.java:80)
> >        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.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:192)
> >        at
> > com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:110)
> >        at
> > com.caucho.hessian.server.HessianServlet.service(HessianServlet.java:416)
> >        at
> > com.starjar.starjarenterprise5.api.ServiceBase.service(ServiceBase.java:107)
> >        at
> > org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
> >        at
> > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
> >        at
> > org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
> >        at
> > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
> >        at
> > org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
> >        at
> > org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
> >        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
> >        at
> > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
> >        at
> > org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
> >        at
> > org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
> >        at
> > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
> >        at
> > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
> >        at
> > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
> >        at
> > org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
> >        at
> > org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
> >        at
> > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
> >        at
> > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
> >        at
> > org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
> >        at
> > com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
> >        at
> > com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
> >        at
> > com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
> >        at
> > com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
> >        at
> > com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
> >        at
> > com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
> >        at
> > com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
> >        at
> > com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
> >        at
> > com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
> > Caused by: 
> > org.apache.openjpa.persistence.PersistenceException: The transaction has
> > been rolled back.  See the nested exceptions for details on the errors that
> > occurred.
> >        at
> > org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2163)
> >        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010)
> >        at
> > org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
> >        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679)
> >        at
> > org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:989)
> >        at
> > org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:592)
> >        at
> > com.starjar.starjarenterprise5.service.helpers.SummaryApi.createSummaryMapping(SummaryApi.java:113)
> >        at
> > com.starjar.starjarenterprise5.api.SummaryChartService.createSummaryMapping(SummaryChartService.java:77)
> >        ... 35 more
> > Caused by: 
> > org.apache.openjpa.persistence.PersistenceException: ERROR: relation
> > "mappings_layout_chart_mapping_id_seq" does not exist {prepstmnt 1646550480
> > SELECT CURRVAL('mappings_layout_chart_mapping_id_SEQ')} [code=0,
> > state=42P01]
> >        at
> > org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4232)
> >        at
> > org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4197)
> >        at
> > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
> >        at
> > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
> >        at
> > org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
> >        at
> > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:74)
> >        at
> > org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
> >        at
> > org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
> >        at
> > org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
> >        at
> > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
> >        at
> > org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
> >        at
> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:717)
> >        at
> > org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
> >        ... 42 more
> > Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR:
> > relation "mappings_layout_chart_mapping_id_seq" does not exist {prepstmnt
> > 1646550480 SELECT CURRVAL('mappings_layout_chart_mapping_id_SEQ')} [code=0,
> > state=42P01]
> >        at
> > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
> >        at
> > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:57)
> >        at
> > org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:852)
> >        at
> > org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262)
> >        at
> > org.apache.openjpa.jdbc.sql.PostgresDictionary$PostgresPreparedStatement.executeQuery(PostgresDictionary.java:520)
> >        at
> > org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262)
> >        at
> > org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1595)
> >        at
> > org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:252)
> >        at
> > org.apache.openjpa.jdbc.sql.DBDictionary.executeQuery(DBDictionary.java:4453)
> >        at
> > org.apache.openjpa.jdbc.sql.DBDictionary.getGeneratedKey(DBDictionary.java:4010)
> >        at
> > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:98)
> >        at
> > org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:72)
> >        ... 49 more
> >
> >
> >
> >
> >
> >
> > --
> > Peter Henderson
> > Director Starjar Limited.
> >
> > Mobile: +44 (0) 778 233 8645
> > Email: peter.henderson@starjar.com
> > Web: www.starjar.com
> >
> >
> 

Re: @GeneratedValue and schemas

Posted by Kevin Sutter <kw...@gmail.com>.
Hi Peter,
I seem to remember some problem that Jeremy found with not processing the
schema name for id generation.  But, maybe my memory isn't what it was...
:-)  I'll copy Jeremy on this reply to see if this rings a bell with him.

Thanks,
Kevin

On Wed, May 13, 2009 at 5:26 PM, Peter Henderson <
peter.henderson@starjar.com> wrote:

> I've an entity bean [1] which maps to a table [2] in a specific schema.
> The entity bean has an Integer id column which is generated using a
> sequence. The database in question is Postgresql 8.3.x
>
> When I used TopLinkEssentials I could specify
>    @GeneratedValue(strategy = GenerationType.IDENTITY)
> and the correct sequence was used
> "summary_charts.mappings_layout_chart_mapping_id_seq"
>
> but...
>
> using OpenJPA I get an exception saying sequence
> "mappings_layout_chart_mapping_id_seq" not being found [3]
> is this a bug with OpenJPA in that it is not using the schema of the table
> or a bug in my code? Shouldn't OpenJpa be looking for a sequence called
> <schema name>.<table>_<id field name>_seq
>
> e.g.
> it should be looking for
>
> summary_charts + "." +   // schema name
> mappings "_"             // table name
> layout_chart_mapping_id "_seq" // column name
>
> "summary_charts.mappings_layout_chart_mapping_id_seq"
>
>
>
>
> In the mean time I have a work around using
> @SequenceGenerator(
>
> name="summary_charts.mappings_layout_chart_mapping_id_seq",
>
> sequenceName="summary_charts.mappings_layout_chart_mapping_id_seq")
>
> and
>    @GeneratedValue(generator =
> "summary_charts.mappings_layout_chart_mapping_id_seq",
>                    strategy = GenerationType.SEQUENCE)
>
>
>
>
>
>
>
>
>
>
>
>
>
> Cheers
>
> Peter.
>
>
>
>
>
>
> [1] Entity bean
> /**
>  *
>  * @author peter
>  */
> @Entity
> @Table(name = "mappings", schema="summary_charts")
> public class SummaryMapping implements Serializable  {
>    @Id
>    @GeneratedValue(strategy = GenerationType.IDENTITY)
>    @Column(name = "layout_chart_mapping_id", nullable = false)
>    private Integer mappingId;
>
> .. SNIP other fields getters/setters/hashcode/equals/toString ..
> }
>
> [2] Database table
> CREATE SCHEMA summary_charts;
>
> CREATE TABLE summary_charts.mappings
> (
>  layout_chart_mapping_id serial NOT NULL,
>  layout_id integer NOT NULL,
>  chart_id integer NOT NULL,
>  layout text NOT NULL,
>  CONSTRAINT mappings_pkey PRIMARY KEY (layout_chart_mapping_id),
>  CONSTRAINT mappings_chart_id_fkey FOREIGN KEY (chart_id)
>      REFERENCES summary_charts.charts (chart_id) MATCH SIMPLE
>      ON UPDATE NO ACTION ON DELETE NO ACTION,
>  CONSTRAINT mappings_layout_id_fkey FOREIGN KEY (layout_id)
>      REFERENCES summary_charts.layouts (layout_id) MATCH SIMPLE
>      ON UPDATE NO ACTION ON DELETE NO ACTION
> )
> WITH (OIDS=FALSE);
> ALTER TABLE summary_charts.mappings OWNER TO dbadmin;
>
>
>
> [3] Exception message
> <openjpa-1.2.1-r752877:753278 fatal store error>
> org.apache.openjpa.persistence.RollbackException: The transaction has been
> rolled back.  See the nested exceptions for details on the errors that
> occurred.
>        at
> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:523)
>        at
> com.starjar.starjarenterprise5.api.ServiceBase.returnEntityManager(ServiceBase.java:98)
>        at
> com.starjar.starjarenterprise5.api.SummaryChartService.createSummaryMapping(SummaryChartService.java:80)
>        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.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:192)
>        at
> com.caucho.hessian.server.HessianSkeleton.invoke(HessianSkeleton.java:110)
>        at
> com.caucho.hessian.server.HessianServlet.service(HessianServlet.java:416)
>        at
> com.starjar.starjarenterprise5.api.ServiceBase.service(ServiceBase.java:107)
>        at
> org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
>        at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
>        at
> org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
>        at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
>        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
>        at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
>        at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
>        at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
>        at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
>        at
> org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
>        at
> org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
>        at
> org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
>        at
> org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
>        at
> com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
>        at
> com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:380)
>        at
> com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
>        at
> com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
> Caused by: <openjpa-1.2.1-r752877:753278 fatal general error>
> org.apache.openjpa.persistence.PersistenceException: The transaction has
> been rolled back.  See the nested exceptions for details on the errors that
> occurred.
>        at
> org.apache.openjpa.kernel.BrokerImpl.newFlushException(BrokerImpl.java:2163)
>        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:2010)
>        at
> org.apache.openjpa.kernel.BrokerImpl.flushSafe(BrokerImpl.java:1908)
>        at org.apache.openjpa.kernel.BrokerImpl.flush(BrokerImpl.java:1679)
>        at
> org.apache.openjpa.kernel.DelegatingBroker.flush(DelegatingBroker.java:989)
>        at
> org.apache.openjpa.persistence.EntityManagerImpl.flush(EntityManagerImpl.java:592)
>        at
> com.starjar.starjarenterprise5.service.helpers.SummaryApi.createSummaryMapping(SummaryApi.java:113)
>        at
> com.starjar.starjarenterprise5.api.SummaryChartService.createSummaryMapping(SummaryChartService.java:77)
>        ... 35 more
> Caused by: <openjpa-1.2.1-r752877:753278 nonfatal general error>
> org.apache.openjpa.persistence.PersistenceException: ERROR: relation
> "mappings_layout_chart_mapping_id_seq" does not exist {prepstmnt 1646550480
> SELECT CURRVAL('mappings_layout_chart_mapping_id_SEQ')} [code=0,
> state=42P01]
>        at
> org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4232)
>        at
> org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4197)
>        at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102)
>        at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88)
>        at
> org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64)
>        at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:74)
>        at
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:543)
>        at
> org.apache.openjpa.jdbc.kernel.ConstraintUpdateManager.flush(ConstraintUpdateManager.java:105)
>        at
> org.apache.openjpa.jdbc.kernel.BatchingConstraintUpdateManager.flush(BatchingConstraintUpdateManager.java:59)
>        at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:89)
>        at
> org.apache.openjpa.jdbc.kernel.AbstractUpdateManager.flush(AbstractUpdateManager.java:72)
>        at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager.flush(JDBCStoreManager.java:717)
>        at
> org.apache.openjpa.kernel.DelegatingStoreManager.flush(DelegatingStoreManager.java:130)
>        ... 42 more
> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR:
> relation "mappings_layout_chart_mapping_id_seq" does not exist {prepstmnt
> 1646550480 SELECT CURRVAL('mappings_layout_chart_mapping_id_SEQ')} [code=0,
> state=42P01]
>        at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:192)
>        at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:57)
>        at
> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:852)
>        at
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262)
>        at
> org.apache.openjpa.jdbc.sql.PostgresDictionary$PostgresPreparedStatement.executeQuery(PostgresDictionary.java:520)
>        at
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262)
>        at
> org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1595)
>        at
> org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:252)
>        at
> org.apache.openjpa.jdbc.sql.DBDictionary.executeQuery(DBDictionary.java:4453)
>        at
> org.apache.openjpa.jdbc.sql.DBDictionary.getGeneratedKey(DBDictionary.java:4010)
>        at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flushInternal(PreparedStatementManagerImpl.java:98)
>        at
> org.apache.openjpa.jdbc.kernel.PreparedStatementManagerImpl.flush(PreparedStatementManagerImpl.java:72)
>        ... 49 more
>
>
>
>
>
>
> --
> Peter Henderson
> Director Starjar Limited.
>
> Mobile: +44 (0) 778 233 8645
> Email: peter.henderson@starjar.com
> Web: www.starjar.com
>
>