Dúvida básica Hibernate

8 respostas
bsl.lacerda

Pessoal, estou tentando persistir um simples objeto no BD (point base) mas estou recebendo uma exception

Acho que está faltando o Persistence.xml…

A conexão com o bd está sendo estabelecida através do arquivo hibernate.properties (inclusive ele gera a tabela automaticamente através das annotations).
O que está faltando para o hibernate reconhecer esta classe e persistir o objeto no bd?

Uma dúvida básica, Há diferença entre usar as annotations da JPA ao invés das hibernate annotations? Tipo, o hibernate sabe trabalhar normalmente com as annotations da JPA ou existem diferenças ao utilizar as classes que auxiliam as operações do CRUD?

MINHA CLASSE A SER PERSISTIDA

@org.hibernate.annotations.Entity
public class User {
	
	@Id
	@GeneratedValue
	@Column(name = "ID_USUARIO", nullable = false, length = 255)
	private Long id;
	
	@Column(name = "NM_NOME", nullable = false, length = 255)
	private String name;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

AGORA A CLASSE MAIN

public class TestaHibernate {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
			
		AnnotationConfiguration cfg = new AnnotationConfiguration();
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		
		com.b2winc.m3.hibernate.User usuario = new com.b2winc.m3.hibernate.User();		
		usuario.setName("Zé fulano");
		
		session.save(usuario);
		session.flush();
		session.close();
}

na escuta… :wink:

8 Respostas

bsl.lacerda

Pra ficar mais complicado ainda, neste projeto tb estou utilizando spring…

Giulliano

Naõ tem nada de complicado nisso ainda…

vc esta usando anotations…logo não precisa de arquivos xml para cada objeto a ser persisitido. Porém é preciso descrever no seu hibernate.cfg.xml as classes que são managed pelo Hibernate.

<mapping class=“br.com.suaempresa.classe” />

Já fez isso ???

Nhandeara

Coloca seu arquivo .xml ai. :?

bsl.lacerda

Eu não criei este arquivo por achar que não seria necessário por causa das annotations.

então eu vou ter que criar o arquivo hibernate.cfg.xml, mapear as classes no mesmo e repetir a configuração de mapeamento do bd, visto que a mesma está configurada no hibernate.properties?

Enquanto vocês respondem eu vou criando o tal arquivo…

hibernate.properties

Giulliano

Normalmente usamos o arquivo do hibernate.cfg.xml e nem sei se dá para usar o hibernate.properties provavelmente sim, só nunca usei.

Lá no seu xml vc ainda pode escrever qual o pool de conexão deseja usar já que o hibernate não pode ser posto em produção sem um poll de conexões adequado.

Recomendo o C3P0

bsl.lacerda

o meu hibernate.cfg.xml está desta forma: (bem simples)

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
<hibernate-configuration>
	<!-- a SessionFactory instance listed as /jndi/name -->
	<session-factory>
		<property name="dialect">
			org.hibernate.dialect.PointbaseDialect
		</property>
		<property name="connection.driver_class">
			com.pointbase.jdbc.jdbcUniversalDriver
		</property>
		<property name="connection.url">
			jdbc:pointbase:server://localhost:9093/weblogic_eval
		</property>
		<property name="connection.username">PBPUBLIC</property>
		<property name="connection.password">PBPUBLIC</property>
		<property name="hibernate.show_sql">true</property>
		<!-- mapping files -->
			<mapping class="com.hibernate.User"/>		
	</session-factory>

</hibernate-configuration>

mas não está aceitando o mapeamento da classe (o mapping não está reconhecendo o atributo class). É ali mesmo que fica este mapeamento? Tem um arquivo destes, completão, para eu usar como exemplo?

Giulliano

segue:

&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&gt;
&lt;hibernate-configuration&gt;
    &lt;session-factory&gt;
    
    &lt;!-- MySQL --&gt;
        &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;
        &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;
        &lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost/base&lt;/property&gt;
        &lt;property name="hibernate.connection.username"&gt;&lt;/property&gt;
        &lt;property name="hibernate.connection.password"&gt;&lt;/property&gt;
	&lt;!-- MySQL --&gt;
		
	&lt;!-- Oracle // 
        &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.OracleDialect&lt;/property&gt;
        &lt;property name="hibernate.connection.driver_class"&gt;oracle.jdbc.driver.OracleDriver&lt;/property&gt;
        &lt;property name="hibernate.connection.url"&gt;jdbc:oracle:thin:@:1521:easyn0&lt;/property&gt;
        &lt;property name="hibernate.connection.username"&gt;&lt;/property&gt;
        &lt;property name="hibernate.connection.password"&gt; &lt;/property&gt;
    // Oracle --&gt;
        
	&lt;!-- Poll Conexões c3p0  --&gt;
  		&lt;property name="hibernate.c3p0.max_size"&gt;100&lt;/property&gt; 
  		&lt;property name="hibernate.c3p0.min_size"&gt;10&lt;/property&gt; 
  		&lt;property name="hibernate.c3p0.timeout"&gt;50000&lt;/property&gt; 
  		&lt;property name="hibernate.c3p0.max_statements"&gt;3000&lt;/property&gt; 
  		&lt;property name="hibernate.c3p0.acquire_increment"&gt;2&lt;/property&gt; 
  		&lt;property name="hibernate.c3p0.validate"&gt;false&lt;/property&gt; 
	&lt;!-- Poll Conexões c3p0 --&gt; 
    
    &lt;!-- Mapeamento das Classes --&gt;
    	&lt;mapping class="br.com.suaempresa.beans.classe" /&gt;
    	&lt;mapping class="br.com.suaempresa.beans.classe" /&gt;
    &lt;!-- Mapeamento das Classes --&gt;
    
    &lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;
bsl.lacerda

Cara, criei o arquivo, mapeei as classes mas continua dando erro. Não sei se o arquivo está no lugar certo, por isso criei uma cópia do mesmo em vários locais, tipo, na pasta META-INF, no src e na raiz do projeto e nada. Também criei o arquivo Persistence.xml com o mapeamento das classes e tambem espalhei ele por todo canto e nada. Tem alguma coisa a ver com o Spring? Sei lá, acrescentar algum mapeamento referente ao hibernate no applicationcontext.xml do Spring já que estas classes são beans do Spring? ???

Criado 31 de janeiro de 2008
Ultima resposta 31 de jan. de 2008
Respostas 8
Participantes 3