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 < [email protected]> 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: [email protected] > Web: www.starjar.com > >
