[hibernate-issues] [Hibernate-JIRA] Created: (HHH-4739) InheritanceType.SINGLE_TABLE don't work with Postgresql 8.4.1 and postgresql-8.4-701.jdbc3.jar

Robert Anderson Nogueira de Oliveira (JIRA) noreply at atlassian.com
Sat Dec 26 23:24:29 EST 2009


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.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

       



More information about the hibernate-issues mailing list