Ajuda Mapeamento Hibernate

Boa tarde,

Estou aprendendo hibernate e estou apanhando um pouquinho.

Alguém tem um mapamento one-to-many e many-to-one
entre dois objetos
para me passar como exemplo, pra eu tentar descobrir o que está
errado???

Obrigado,

Abraço

de uma procurada na documentação, tam bastante exemplos:
http://www.hibernate.org/78.html

este link é o que vc precisa: :slight_smile:
http://www.xylax.net/hibernate/

Valew Ricardo pelas dicas… Muito bom o site
http://www.xylax.net/hibernate/

Mas eu tinha olhado um monte de exemplos e estou apanhando
quando tenho uma foreign key composta por duas colunas.

Seria assim as tabelas:


Tabelas action:

id_action - PK
id_product_action - PK
description


Tabela log_user:

id_user
id_action - FK
id_product_action - FK

O mapemento do log_user tá assim:

<hibernate-mapping>	
	<class name="br.com.proj.dao.register.LogUser" table="log_user">
		<many-to-one name="user" column="id_user" class="br.com.proj.dao.register.User"/>
		<property name="dtLog" column="dt_log" type="date"/>
		<many-to-one name="action" class="br.com.proj.dao.register.Action">
			<column name="id_action"/>
			<column name="id_product_action"/>
		</many-to-one>		
		<property name="idSession" column="id_session" type="long"/> 
		<property name="complement" column="complement" type="string"/> 
	</class>
</hibernate-mapping>

está dando o seguinte erro:

The content of element type “class” must match “(meta*,jcs-cache?,(id|composite-id),discriminator?,(version|timestamp)?,(property|many-to-one|one-to-one|component|dynabean|any|map|set|list|bag|idbag|array|primitive-array),(subclass|joined-subclass*))”.

Creio que tem algo errado na classe ou no mapeamento.
O mapeamento do action eu coloquei a tag composite-id
para compor a PK, mas não sei o que acontece.

Se puder dar uma olhadinha.

Muito obrigado pela atenção.

abraço

vou lhe dar um exemplo de composite id que fiz uma vez… tente adaptar para o seu caso…

quando vc faz um composite id vc precisa de uma classe que representa a chave composta, esta classe implementa a interface Serializable e possui os get/set para as propriedades da chave composta…

Exemplo de classe CompositeID

import java.io.Serializable;

public class CompositeID implements Serializable
{
	private int id1;
	private int id2;
	
	public CompositeID()
	{}
	
	public CompositeID(int i, int j)
	{
		this.id1 = i;
		this.id2 = j;		
	}

// coloque os GET/SET

Classe que utiliza o CompositeID

public class Pessoa
{
	private CompositeID id;
	private String nome;

                public Pessoa(CompositeID id, String nome)
	{
		this.id = id;
		this.nome = nome;
	}
// coloque os GET/SET
}

Mapping File

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-1.1.dtd">

<hibernate-mapping>
    <class name="hibernate.Pessoa" table="Pessoa">
        <composite-id name="id" class="hibernate.CompositeID">
            <key-property name="id1" type="int" column="id1"/>
            <key-property name="id2" type="int" column="id2"/>
        </composite-id>
        <property name="nome" column="nome" type="string"/>
    </class>
</hibernate-mapping>

meu exemplo não usa one-to-many, many-to-many, como vc quer, mas é só mudar no composite-id…
como por exemplo: http://www.xylax.net/hibernate/compositeid.html

qualquer coisa pergunta :slight_smile:

Valew Ricardo,

vou tentar montar isso aqui nos
mapeamentos.

Então, aproveintando, sem querer abusar de novo, vc já viu este erro:

consultanet.sf.hibernate.PropertyAccessException: exception setting property value with CGLIB setter of br.com.hst.dao.register.User.?

Eu tava olhando a documentação, e vi que tem que colocar
not-null=“true” para tipos primitivos que podem ser null.
Eu coloquei isto no mapeamento, mas mesmo assim dá o mesmo erro.
Lá tbm diz para verificar os getters e setters. Veirfiquei todos
e dá o mesmo erro.

To meio perdido ainda com hibernatem, apesar de revirar artigos
sobre o assunto, documentação. Até entrei no forum que tem
no site hibernate.org.

Muito obrigado pela ajuda e pela atenção,

Abraço

Puz, achei o problema.

Eu configurei o hibernate properties, a variável

hibernate.cglib.use_reflection_optimizer para false, daí ele
especifica melhor qual o erro.

No bean, eu to usando tipo primitivo int que pode ser null
na tabela, então parece que ele tá tentando a acessar algo como null,
retornando o seguinte erro:

PropertyAccessException: Null value was assigned to a property of primitive type setter of br.com.proj.dao.register.User.nbEmployee

O que fazer agora que o valor primitivo pode ser null.

No forum do hibernate, eles recomandam colocar um valor default,
“0” por exemplo, mas não gosto muito dessa idéia, sei lá.

em vez de int, utiliza o Integer que resolve o problema :slight_smile:

E ai, blz?

Cara eu tinha feito isso outra vez e não deu certo.

Agora coloquei como integer e beleza…

Valew,

Abraço