Erro:Valor nulo na coluna "universidade_id"..ao incluir dados no BD[Postgre] com Hibernate

Estou tentando persistir no banco (postgreesql) dados de uma universidade numa relacao 1-n… so que o problema é que o campo universidade_id da tabela Centro não está sendo populado automaticamente… pois pelo que eu entendi qndo é criada a tabela universidade o id dela é passado para este campo de forma automatica(join do annotation)…

Bem abaixo coloque a tabela criada e as classes utilizadas.

Por favor me ajudem que isso ta medando uma dor de cabeça =/

Tabelas:


CREATE TABLE Universidade (
  id SERIAL  NOT NULL ,
  nome VARCHAR(300)      ,
PRIMARY KEY(id));

CREATE TABLE Centro (
  id SERIAL  NOT NULL ,
  Universidade_id INTEGER   NOT NULL ,
  nome VARCHAR(300)      ,
PRIMARY KEY(id)  ,
  FOREIGN KEY(Universidade_id)
    REFERENCES Universidade(id));


CREATE INDEX Centro_FKIndex1 ON Centro (Universidade_id);


CREATE INDEX IFK_Rel_01 ON Centro (Universidade_id);

Classe Centro

@Entity
@Table(name="Centro")
@SequenceGenerator(name = "seq_centro", sequenceName = "seq_centro", allocationSize = 1) 
public class Centro {
	
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_centro")
    //@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id")	
	private int id;
    private String nome;


	private Universidade universidade; 

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name="universidade_id",
			insertable=true, updatable=true)
			@Fetch(FetchMode.JOIN)
			@Cascade(CascadeType.SAVE_UPDATE)
	public Universidade getUniversidade() {
		return universidade;
	}
	public void setUniversidade(Universidade universidade) {
		this.universidade = universidade;
	}
}

Classe Universidade:


@javax.persistence.Entity
@javax.persistence.Table(name="Universidade")
@SequenceGenerator(name = "seq_universidade", sequenceName = "seq_universidade", allocationSize = 1) 
public class Universidade {

	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_universidade")
	// @GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id")
	private int id;
	private String nome;	
	

	private Collection<Centro> centros;
	

	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@OneToMany(mappedBy="universidade", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	public Collection<Centro> getCentros() {
		return centros;
	}
	
	public void setCentros(Collection<Centro> centros) {
		this.centros = centros;
	}
}

Classe de Teste:

    public class TesteUniversidade {  
          
        public static void main(String[] args) {  
            try {  
                Centro centro = new Centro();  
                centro.setNome("juca");
                     
                Universidade uni = new Universidade();
                uni.setNome("juca");
                                                  
                Session session = HibernateUtil.getSession();  
                session.beginTransaction();  
                                                
                Universidade univ = new Universidade();
                univ.setNome("Universidade Federal do Rio Grande do Norte");
                
                Centro centro1 = new Centro();
                centro1.setNome("Centro de Tecnologia");
                centro1.setUniversidade(univ);
                
                Centro centro2 = new Centro();
                centro2.setNome("Centro de Humanas");
                centro2.setUniversidade(univ);
                
                univ.setCentros(new HashSet<Centro>());
                univ.getCentros().add(centro1);
                univ.getCentros().add(centro2);
                session.save(centro1);
                                  
                session.save(uni);  
                session.getTransaction().commit();  
                  
                System.out.println("Gravado contato: " + uni.getId());  
                  
            } catch (HibernateException e) {  
                e.printStackTrace();  
            }  
        }  
    }  


      
    import org.hibernate.HibernateException;  
    import org.hibernate.Session;  
    import org.hibernate.SessionFactory;  
    import org.hibernate.cfg.AnnotationConfiguration;  
      
    public class HibernateUtil {  
          
        private static final SessionFactory sessionFactory;  
          
        static {  
            try {  
                sessionFactory = new AnnotationConfiguration()  
                    .configure()  
                    .buildSessionFactory();  
                  
            } catch (Throwable ex) {  
                // Log exception!  
                throw new ExceptionInInitializerError(ex);  
            }  
        }  
          
        public static Session getSession() throws HibernateException {  
            return sessionFactory.openSession();  
        }  
    }  
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
        
<hibernate-configuration>  
     <session-factory>  
         <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>  
         <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/teste</property>  
         <property name="hibernate.connection.username">postgres</property>  
         <property name="hibernate.connection.password">lol321</property>  
         <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>       
         <property name="hibernate.show_sql">true</property>
         <property name="hibernate.format_sql">true</property> 
         		
 		<mapping class="Universidade"/> 
 		<mapping class="Centro"/>      		
		 		 
     </session-factory>  
</hibernate-configuration> 
 
0 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.2-Final
16 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.2-Final
16 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
16 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
16 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
125 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
141 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
141 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
203 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
203 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
250 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Universidade
281 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Universidade on table Universidade
328 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Centro
328 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Centro on table Centro
328 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Contato
328 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Contato on table Contato
343 [main] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
375 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
375 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20
375 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
390 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: org.postgresql.Driver at URL: jdbc:postgresql://localhost:5432/teste
390 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=postgres, password=****}
484 [main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: PostgreSQL, version: 9.0.3
484 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: PostgreSQL Native Driver, version: PostgreSQL 8.4 JDBC4 (build 702)
499 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.PostgreSQLDialect
515 [main] INFO org.hibernate.engine.jdbc.JdbcSupportLoader - Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException
515 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
515 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
515 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch size: 15
515 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): enabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto
515 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
515 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
515 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
515 [main] INFO org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
515 [main] INFO org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Query cache: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
515 [main] INFO org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout
515 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
515 [main] INFO org.hibernate.cfg.SettingsFactory - Named query checking : enabled
515 [main] INFO org.hibernate.cfg.SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation is on): enabled
546 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
702 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
Hibernate: 
    select
        nextval ('hibernate_sequence')
Hibernate: 
    select
        nextval ('hibernate_sequence')
Hibernate: 
    insert 
    into
        Centro
        (nome, id) 
    values
        (?, ?)
780 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 23502
780 [main] ERROR org.hibernate.util.JDBCExceptionReporter - Entrada em lote 0 insert into Centro (nome, id) values ('Centro de Tecnologia', '130') foi abortada. Chame getNextException para ver a causa.
780 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 23502
780 [main] ERROR org.hibernate.util.JDBCExceptionReporter - ERRO: valor nulo na coluna "universidade_id" viola a restrição não-nula
780 [main] ERROR org.hibernate.event.def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
	at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2395)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2858)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:179)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at TesteUniversidade.main(TesteUniversidade.java:38)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into Centro (nome, id) values ('Centro de Tecnologia', '130') foi abortada. Chame getNextException para ver a causa.
	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2586)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1811)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2725)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 15 more
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96)
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:275)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:114)
	at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)
	at org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:244)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2395)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2858)
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:179)
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
	at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:375)
	at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
	at TesteUniversidade.main(TesteUniversidade.java:38)
Caused by: java.sql.BatchUpdateException: Entrada em lote 0 insert into Centro (nome, id) values ('Centro de Tecnologia', '130') foi abortada. Chame getNextException para ver a causa.
	at org.postgresql.jdbc2.AbstractJdbc2Statement$BatchResultHandler.handleError(AbstractJdbc2Statement.java:2586)
	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1811)
	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:407)
	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeBatch(AbstractJdbc2Statement.java:2725)
	at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
	... 15 more

Tira o @Transient

Mas qndo eu tiro dá esse erro:

O que deve ser ??


0 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.2-Final
15 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.2-Final
15 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
15 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
15 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
124 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
124 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
124 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
202 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
202 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
249 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Universidade
280 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Universidade on table universidade
Exception in thread "main" java.lang.ExceptionInInitializerError
	at HibernateUtil.<clinit>(HibernateUtil.java:18)
	at TesteUniversidade.main(TesteUniversidade.java:17)
Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1837)
	at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:769)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:733)
	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
	at HibernateUtil.<clinit>(HibernateUtil.java:14)
	... 1 more

Retira também o @Transient da outra classe

ja tirei das 2

limp13,

em vez de usar o SEQUENCE usa IDENTITY = seria algo assim @GeneratedValue(strategy=GenerationType.IDENTITY), mas se mesmo assim não funcionar tente o seguinte

@Entity  
@SequenceGenerator(name="Teste",sequenceName="nome da sequencia no BD", allocationSize = 1)
public class Centro {  
      
    @Id   
   @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "Teste")
    @Column(name="id")    
    private int id;  

vc pode fazer isso para todas as classes que utilizam o SEQUENCE…

Bem alterei o sequence para as duas formas que tu falou… erro foi o mesmo para as duas:

Nao da pra determinar o tipo da Universidade… tu saberia me dizer qual é o problema???

Será que não é por causa do Collection ???

Caused by: org.hibernate.MappingException: Could not determine type for: Universidade, at table: Centro, for columns: [org.hibernate.mapping.Column(universidade)]

Atualizei as classes acima… para vc verificar… e adicionei o hibernate.cfg.xml… pq pode ser que tenha erro nele…

0 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.2-Final
16 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.2-Final
16 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
16 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
16 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
109 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
125 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
125 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
187 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
187 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
234 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Universidade
265 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Universidade on table Universidade
296 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Centro
296 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Centro on table Centro
312 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Contato
312 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Contato on table Contato
312 [main] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
Exception in thread “main” java.lang.ExceptionInInitializerError
at HibernateUtil.(HibernateUtil.java:18)
at TesteUniversidade.main(TesteUniversidade.java:17)
Caused by: org.hibernate.MappingException: Could not determine type for: Universidade, at table: Centro, for columns: [org.hibernate.mapping.Column(universidade)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:291)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:275)
at org.hibernate.mapping.Property.isValid(Property.java:217)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:464)
at org.hibernate.mapping.RootClass.validate(RootClass.java:236)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1193)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1378)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
at HibernateUtil.(HibernateUtil.java:14)
… 1 more

limp13,

implemente e classe seria Serializable, conforme mostrado a baixo e verifique o nome da sequencia que foi criada no banco fazendo o teste aqui o nome da sequencia ficou centro_id_seq/universidade_id_seq no seu deve ter ficado a mesma coisa…
Quando for fazer o teste, faça com um registro que já exista no bando e depois tente com um novo…
Fiz os testes aqui e funcionou blz…espero ter ajudado…

@Entity  
@Table(name="Centro")  
@SequenceGenerator(name = "seq_centro", sequenceName = "centro_id_seq", allocationSize = 1)   
public class Centro implements Serializable{  
      
    @Id   
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_centro")  
    //@GeneratedValue(strategy=GenerationType.IDENTITY)  
    @Column(name="id")    
    private int id;  
    private String nome;  
    
    @ManyToOne(fetch=FetchType.LAZY)
    private Universidade universidade;   
  
    public int getId() {  
        return id;  
    }  
    public void setId(int id) {  
        this.id = id;  
    }  
    public String getNome() {  
        return nome;  
    }  
    public void setNome(String nome) {  
        this.nome = nome;  
    }
	public void setUniversidade(Universidade universidade) {
		this.universidade = universidade;
	}
	public Universidade getUniversidade() {
		return universidade;
	}

@Entity  
@Table(name="Universidade")  
@SequenceGenerator(name = "seq_universidade", sequenceName = "universidade_id_seq", allocationSize = 1)   
public class Universidade implements Serializable{  
  
    @Id   
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_universidade")  
    // @GeneratedValue(strategy=GenerationType.IDENTITY)  
    @Column(name="id")  
    private int id;  
    private String nome;      
      
    @OneToMany(mappedBy="universidade", fetch = FetchType.LAZY)
    private Collection<Centro> centros;  
      
  
    public int getId() {  [code]
        return id;  
    }  
      
    public void setId(int id) {  
        this.id = id;  
    }  
      
    public String getNome() {  
        return nome;  
    }  
      
    public void setNome(String nome) {  
        this.nome = nome;  
    }

	public void setCentros(Collection<Centro> centros) {
		this.centros = centros;
	}

	public Collection<Centro> getCentros() {
		return centros;
	}  
      
}

Está dando erro ainda:

não teria como por todos os arquivos que tu utilizou… pq tem que ter algo errado aff…

2 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.5.2-Final
14 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.2-Final
16 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
18 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
22 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
118 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
123 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
124 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
190 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
194 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
239 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Centro
275 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Centro on table Centro
319 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Universidade
320 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Universidade on table Universidade
Exception in thread "main" java.lang.ExceptionInInitializerError
	at HibernateUtil.<clinit>(HibernateUtil.java:18)
	at TesteUniversidade.main(TesteUniversidade.java:18)
Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1837)
	at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:769)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:733)
	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1377)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
	at HibernateUtil.<clinit>(HibernateUtil.java:14)
	... 1 more

Este erro aconteceu quando, no momento que vc chama o HibernateUtil…verifica se vc esta chamando a session corretamente, estou lhe enviando agora o HibernateUtil.
Se eu não me engano vc esta chamando a session de forma errada seria algo ± assim, espero que ajuda agora…srsrsrs

Session session = new HibernateUtil().getSession();


public final class HibernateUtil {
	
	private static SessionFactory factory;

	
	static{
		try{
			AnnotationConfiguration cfg = new AnnotationConfiguration();
			cfg.addAnnotatedClass(Universidade.class);
			cfg.addAnnotatedClass(Centro.class);
			factory = cfg.buildSessionFactory();
        }catch(Throwable ex){
            throw new ExceptionInInitializerError(ex);
        }

	
	public Session getSession(){
		return factory.openSession();
	}

	
}


Po… qndo eu adiciono por exemplo 2 centros o bd faz o update correto na tabela universidade… já quando eu adiciono 1 universidade ele nao faz o update na tabela Centro …

Não deveria funcionar tb qndo eu persisto uma universidade???

import java.util.HashSet;

import org.hibernate.HibernateException;
import org.hibernate.Session;  

    public class TesteUniversidade {  

		public static void main(String[] args) {  
            try {  
                Centro centro = new Centro();  
                centro.setNome("juca");
                     
                Universidade uni = new Universidade();
                uni.setNome("juca");
                                                  
                Session session = new HibernateUtil().getSession(); 
                session.beginTransaction();  
                                                
                Universidade univ = new Universidade();
                univ.setNome("Universidade Federal do Rio Grande do Norte");
                
                Centro centro1 = new Centro();
                centro1.setNome("Centro de Tecnologia");
                centro1.setUniversidade(univ);
                
                Centro centro2 = new Centro();
                centro2.setNome("Centro de Humanas");
                centro2.setUniversidade(univ);
                
                univ.setCentros(new HashSet<Centro>());
                univ.getCentros().add(centro1);
                univ.getCentros().add(centro2);
                session.save(univ);
                                  
                session.save(uni);  
               // session.save(centro1);
               // session.save(centro2);
                session.getTransaction().commit();  
                  
               // System.out.println("Gravado contato: " + uni.getId());  
                  
            } catch (HibernateException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
    
    

Qndo executo a classe apenas adicionando a universidade:

2 [main] INFO org.hibernate.cfg.annotations.Version - Hibernate Annotations 3.4.0.GA
12 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.3.1.GA
15 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
17 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
21 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
66 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.1.0.GA
68 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
68 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
141 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
143 [main] INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister - Unable to find org.hibernate.search.event.FullTextIndexEventListener on the classpath. Hibernate Search is not enabled.
184 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Centro
209 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Centro on table Centro
249 [main] INFO org.hibernate.cfg.AnnotationBinder - Binding entity from annotated class: Universidade
250 [main] INFO org.hibernate.cfg.annotations.EntityBinder - Bind entity Universidade on table Universidade
279 [main] INFO org.hibernate.cfg.annotations.CollectionBinder - Mapping collection: Universidade.centros -> Centro
282 [main] INFO org.hibernate.cfg.AnnotationConfiguration - Hibernate Validator not found: ignoring
320 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
320 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20
320 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
330 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: org.postgresql.Driver at URL: jdbc:postgresql://localhost:5432/teste
330 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=postgres, password=****}
442 [main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: PostgreSQL, version: 9.0.3
442 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: PostgreSQL Native Driver, version: PostgreSQL 8.4 JDBC4 (build 702)
454 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.PostgreSQLDialect
458 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
459 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
459 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
459 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
459 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch size: 15
459 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC batch updates for versioned data: disabled
459 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled
459 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): enabled
459 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto
460 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
460 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
460 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
460 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled
460 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
461 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
461 [main] INFO org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
461 [main] INFO org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: disabled
461 [main] INFO org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
461 [main] INFO org.hibernate.cfg.SettingsFactory - Query cache: disabled
461 [main] INFO org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
461 [main] INFO org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
461 [main] INFO org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
468 [main] INFO org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout
468 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled
468 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
469 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
469 [main] INFO org.hibernate.cfg.SettingsFactory - Named query checking : enabled
501 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
649 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
Hibernate: 
    select
        nextval ('universidade_id_seq')
Hibernate: 
    select
        nextval ('universidade_id_seq')
Hibernate: 
    insert 
    into
        Universidade
        (nome, id_universidade) 
    values
        (?, ?)
Hibernate: 
    insert 
    into
        Universidade
        (nome, id_universidade) 
    values
        (?, ?)

Neste seu caso, realmente não vai funcionar, pq vc deve primeiro ter a universidade no banco para depois adicionar o centro, e no seu exemplo vc cria uma universidade e depois adiciona dois centro sem antes salvar…

O Problema está que vc está em uma mesma Transação e como a Universidade ainda não existe o BD não tem o ID dele (chave primaria) e por isso daria erro ao adicionar o centro, pois como ele ainda não tem o ID ele não tem como criar o centro se referenciando a universidade…

Voce pode ver no erro que o erro e de chave violado por estar nula…

Tente salvar primeiramente a universidade para depois adicionar o centro…veja se funciona…espero ter ajudado…

Bem… deu certo colocando na forma abaixo … so achei estranho que na aspotila que eu estou lendo fala da relação com o CASCADE.ALL… que no caso se eu colocar deveria atualizar automaticamente os centros, porem eu so consegui fazendo o join na classe Universidade… não sei se teria outra forma de fazer… tentei por CASCADE.ALL na classe centro ao inves de CASCADE.SAVE_UPDATE mas não funcionou…

Frase da apostila:
“Listagem 5 ? Exemplo de Persistência OneToMany. Efeito da anotação
@Cascade(CascadeType.ALL)
A Listagem 6 apresenta o resultado da persistência do objeto universidade
presente na Listagem 5. Observa-se, que a partir do atributo cascade com valor
CascadeType.ALL, inicialmente é inserida uma linha na tabela universidade e
em seguida duas linhas na tabela centro. Vale salientar, que na hora de inserir as
linhas na tabela centro, como os objetos que as representavam foram associados
ao objeto universidade, automaticamente, o Hibernate atribui como valor de suas
chaves estrangeiras, o valor gerado para a chave primária da linha criada na tabela
universidade.”


Classe Universidade

AGORA:

    @JoinColumn(name="id_centro",
			insertable=true, updatable=true)
			@Fetch(FetchMode.JOIN)
			@Cascade(CascadeType.ALL)
    @OneToMany(mappedBy="universidade", fetch = FetchType.LAZY)  
    private Collection<Centro> centros;   

ANTES:

 @OneToMany(mappedBy="universidade", fetch = FetchType.LAZY)  

Classe Centro

    @JoinColumn(name="universidade_id",
			insertable=true, updatable=true)
			@Fetch(FetchMode.JOIN)
			@Cascade(CascadeType.ALL) 
    @ManyToOne(fetch = FetchType.EAGER)
    private Universidade universidade;