[hibernate-issues] [Hibernate-JIRA] Commented: (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:06: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 commented on HHH-4739:
---------------------------------

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