[hibernate-issues] [Hibernate-JIRA] Issue Comment Edited: (HHH-4739) InheritanceType.SINGLE_TABLE don't work with Postgresql 8.4.1 and postgresql-8.4-701.jdbc3.jar
Max Cheban (JIRA)
noreply at atlassian.com
Tue Dec 27 08:08:19 EST 2011
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-4739?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44706#comment-44706 ]
Max Cheban edited comment on HHH-4739 at 12/27/11 7:07 AM:
-----------------------------------------------------------
You just need to provide proper RETURNING column order.
Method org.hibernate.id.IdentityGenerator.GetGeneratedKeysDelegate.prepare(String, SessionImplementor) should be rewritten as following:
protected PreparedStatement prepare(String insertSQL, SessionImplementor session) throws SQLException {
return session.getBatcher().prepareStatement( insertSQL, persister.getRootTableKeyColumnNames() );
}
I wonder why it isn't implemented as in SequenceIdentityGenerator class
was (Author: mcheban):
You just need to provide proper RETURNING column order.
Method org.hibernate.id.IdentityGenerator.GetGeneratedKeysDelegate.prepare(String, SessionImplementor) should be rewritten as following:
protected PreparedStatement prepare(String insertSQL, SessionImplementor session) throws SQLException {
return session.getBatcher().prepareStatement( insertSQL, persister.getRootTableKeyColumnNames() );
}
> InheritanceType.SINGLE_TABLE don't work with Postgresql 8.4.1 and postgresql-8.4-701.jdbc3.jar
> ----------------------------------------------------------------------------------------------
>
> Key: HHH-4739
> URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-4739
> Project: Hibernate Core
> Issue Type: Bug
> Components: annotations, core, entity-manager, testsuite
> Affects Versions: 3.3.1
> Environment: JBoss Seam 2.2.0-GA, PostgreSQL 8.4.1, postgresql-8.4-701.jdbc3.jar
> Reporter: Robert Anderson Nogueira de Oliveira
> Attachments: main-classes.zip
>
>
> @Entity
> public class FenomenoMetadado implements Serializable {
> /**
> *
> */
> private static final long serialVersionUID = 1L;
> @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
> private Integer id;
> @NotNull
> private String nome;
> private String descricao;
> @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "fenomenoMetadado")
> private List<AtributoMetadado> atributosMetadado;
> /* Getters and Setters */
> }
> @Entity
> @Inheritance(strategy=InheritanceType.SINGLE_TABLE)
> public abstract class AtributoMetadado implements Serializable {
> /**
> *
> */
> private static final long serialVersionUID = 1L;
>
> @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
> private Integer id;
> @NotNull
> private String nome;
> @NotNull
> private String label;
> @NotNull
> private Boolean requerido;
>
> @ManyToOne
> @JoinColumn(name="fenomenometadado_id", nullable = false)
> private FenomenoMetadado fenomenoMetadado;
> /* Getters and Setters */
> }
> @Entity
> public class StringMetaDado extends AtributoMetadado {
> /**
> *
> */
> private static final long serialVersionUID = 1L;
> }
> TestNG:
> public class FenomenoMetadadoTests extends SeamTest {
>
> @Test
> public void testarCriarRemover() throws Exception {
> final FenomenoMetadado instalacaoMetaDado = new FenomenoMetadado();
> instalacaoMetaDado.setNome("Instalações");
> instalacaoMetaDado.setDescricao("Instalações de Petróleo e Gás");
> List<AtributoMetadado> atributos = new ArrayList<AtributoMetadado>();
> StringMetaDado att1 = new StringMetaDado();
> att1.setLabel("Nome");
> att1.setNome("nome");
> att1.setRequerido(true);
> att1.setFenomenoMetadado(instalacaoMetaDado);
> atributos.add(att1);
> instalacaoMetaDado.setAtributosMetadado(atributos);
> new FacesRequest() {
> protected void invokeApplication()
> {
> EntityManager em = (EntityManager) getValue("#{entityManager}");
>
> try {
> em.persist(instalacaoMetaDado);
> } catch (Exception e) {
> e.printStackTrace();
> fail("Hibernate Bug with postgresql-8.4-701.jdbc3.jar");
> }
> }
> }.run();
>
> }
> Stacktrace:
> Hibernate:
> insert
> into
> FenomenoMetadado
> (descricao, nome)
> values
> (?, ?)
> Hibernate:
> insert
> into
> AtributoMetadado
> (fenomenometadado_id, label, nome, requerido, DTYPE)
> values
> (?, ?, ?, ?, 'StringMetaDado')
> ERROR [org.hibernate.util.JDBCExceptionReporter] Valor inválido para tipo int : StringMetaDado
> javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not insert: [org.domain.geoinfra.entity.StringMetaDado]
> at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
> at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:226)
> at org.jboss.seam.persistence.EntityManagerProxy.persist(EntityManagerProxy.java:137)
> at org.hibernate.search.jpa.impl.FullTextEntityManagerImpl.persist(FullTextEntityManagerImpl.java:93)
> at org.jboss.seam.persistence.EntityManagerProxy.persist(EntityManagerProxy.java:137)
> at tests.FenomenoMetadadoTests$2.invokeApplication(FenomenoMetadadoTests.java:74)
> at org.jboss.seam.mock.AbstractSeamTest$Request.invokeApplicationPhase(AbstractSeamTest.java:646)
> at org.jboss.seam.mock.AbstractSeamTest$Request.emulateJsfLifecycle(AbstractSeamTest.java:595)
> at org.jboss.seam.mock.AbstractSeamTest$Request.access$100(AbstractSeamTest.java:177)
> at org.jboss.seam.mock.AbstractSeamTest$Request$2.doFilter(AbstractSeamTest.java:497)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:83)
> at org.jboss.seam.web.IdentityFilter.doFilter(IdentityFilter.java:40)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.web.MultipartFilter.doFilter(MultipartFilter.java:90)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.web.ExceptionFilter.doFilter(ExceptionFilter.java:64)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.web.RedirectFilter.doFilter(RedirectFilter.java:45)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
> at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
> at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:368)
> at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)
> at org.jboss.seam.web.Ajax4jsfFilter.doFilter(Ajax4jsfFilter.java:56)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.web.LoggingFilter.doFilter(LoggingFilter.java:60)
> at org.jboss.seam.servlet.SeamFilter$FilterChainImpl.doFilter(SeamFilter.java:69)
> at org.jboss.seam.servlet.SeamFilter.doFilter(SeamFilter.java:158)
> at org.jboss.seam.mock.AbstractSeamTest$Request.run(AbstractSeamTest.java:491)
> at tests.FenomenoMetadadoTests.testarCriarRemover(FenomenoMetadadoTests.java:82)
> 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.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:644)
> at org.testng.internal.Invoker.invokeMethod(Invoker.java:546)
> at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:700)
> at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1002)
> at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:137)
> at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)
> at org.testng.TestRunner.runWorkers(TestRunner.java:908)
> at org.testng.TestRunner.privateRun(TestRunner.java:617)
> at org.testng.TestRunner.run(TestRunner.java:498)
> at org.testng.SuiteRunner.runTest(SuiteRunner.java:329)
> at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:324)
> at org.testng.SuiteRunner.privateRun(SuiteRunner.java:296)
> at org.testng.SuiteRunner.run(SuiteRunner.java:201)
> at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:915)
> at org.testng.TestNG.runSuitesLocally(TestNG.java:879)
> at org.testng.TestNG.run(TestNG.java:787)
> at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:75)
> at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:127)
> Caused by: org.hibernate.exception.DataException: could not insert: [org.domain.geoinfra.entity.StringMetaDado]
> at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:100)
> at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
> at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
> at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2186)
> at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2666)
> at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
> at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
> at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
> at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
> at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
> at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
> at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
> at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:636)
> at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:628)
> at org.hibernate.engine.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:28)
> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
> at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:319)
> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:265)
> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:242)
> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
> at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
> at org.hibernate.event.def.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:479)
> at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:357)
> at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
> at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
> at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
> at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:154)
> at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:110)
> at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
> at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:645)
> at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:619)
> at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:623)
> at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:220)
> ... 50 more
> Caused by: org.postgresql.util.PSQLException: Valor inválido para tipo int : StringMetaDado
> at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toInt(AbstractJdbc2ResultSet.java:2759)
> at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getInt(AbstractJdbc2ResultSet.java:2003)
> at org.jboss.resource.adapter.jdbc.WrappedResultSet.getInt(WrappedResultSet.java:673)
> at org.hibernate.id.IdentifierGeneratorFactory.get(IdentifierGeneratorFactory.java:107)
> at org.hibernate.id.IdentifierGeneratorFactory.getGeneratedIdentity(IdentifierGeneratorFactory.java:92)
> at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:98)
> at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
> ... 83 more
> If I use the jdbc driver postgresql-8.3-605.jdbc3.jar it works fine.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list