Mapeamento Hibernate Annotation

alguem sabe fazer esse mapeamento em annotation

person

tetegalvao,

Caso eu não esteja enganado me parece ser o seguinte:


@Entity
public class Person {

  @Id
  @GeneretedValue
  @Column(name="id_person")
  private int id;

  @Column(name="person")
  private String person;


}

Caso não seja isso, poste as suas classes que fica mais fácil entender.

Espero ter ajudado.

vlw ai vai a classe toda
Classe Endereço




pessoa

... ...

Classe Pessoa


Esses são os principais campos do mapeamento. O que eu queria era que ao salvar um pessoa com enderço ele salvasse o endereço com o mesmo id da pessoa, sem precisar mandar salvar o endereço explicitamente. Vlw pela ajuda

tetegalvao,

Eu vou colocar pra você o código de 2 classes, que tem alguns mapeamentos básicos, para você dar uma olhada.

Após ver o exemplo, tente fazer o seu, e caso surjam mais dúvidas poste aqui.

@Entity(name="Shinigami")
@Table(name="tb_brian_shinigami") 
@SequenceGenerator(name = "seq_shinigami", sequenceName = "seq_shinigami")

public class Shinigami {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_shinigami")
    @Column(name="id_shinigami")
    private int id;
    
    @Column(name="txt_nome")
    private String nome;
   
    @OneToMany    
    @JoinTable( 
        name="tb_brian_shinigami_emails",
        joinColumns={@JoinColumn(name="id_shinigami")}        
    )     
    private Set<String> emails = new HashSet();

   // getters and setters
}

@Entity(name="Evento")
@Table(name="tb_brian_evento")
@SequenceGenerator(name = "seq_evento", sequenceName = "seq_evento")
public class Evento {
    
    @Id    
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_evento")
    @Column(name="id_evento")  
    private int id;
    
    @Column(name="txt_titulo")
    private String titulo;
    
    @Column(name="dat_data")
    private Date data;
    
    @ManyToMany(targetEntity=hiberapp0.Shinigami.class, cascade={CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(
        name="tb_brian_evento_shinigami",
        joinColumns={@JoinColumn(name="id_shinigami", table="tb_brian_shinigami")},
        inverseJoinColumns = @JoinColumn( name="id_evento")
    )  
    
    private Set shinigami = new HashSet();

 // getters and setters
}

Quando ao salvar os objetos não é no mapeamento.
Eu vou colar um método de uma classe DAO

    public void addEmailToShinigami(int codigoShinigami, String emailShinigami){
        Session session = factory.openSession();   
        Shinigami umShinigami = (Shinigami) session.load(Shinigami.class, codigoShinigami);
        // The getEmailAddresses() might trigger a lazy load of the collection
        umShinigami.getEmails().add(emailShinigami);        
        session.flush();   
        session.close();       
        this.commit();
        
    }

De também uma olhada neste link, que é o Guia de Referencia do Hibernate Annotations:

http://www.hibernate.org/hib_docs/annotations/reference/en/pdf/hibernate_annotations.pdf

Boa sorte.

vlw cara!!! Ajudou muito!!! :lol:

[quote=fsquadro]tetegalvao,

Eu vou colocar pra você o código de 2 classes, que tem alguns mapeamentos básicos, para você dar uma olhada.

  
    @OneToMany    
    @JoinTable( 
        name="tb_brian_shinigami_emails",
        joinColumns={@JoinColumn(name="id_shinigami")}        
    )     
    private Set<String> emails = new HashSet();

   // getters and setters
}

[/quote]
Oi fsquadro vc já me mandou esse exemplo dos Shiginami(Que aliás oque é um?^^)
mais eu não consigo fazer um @OneToMany pra Strings

@OneToMany @JoinTable( name="tb_cotacoes_medidas", joinColumns={@JoinColumn(name="id_cotacao")} ) private Set<String> Medidas = new HashSet<String>();

Erro:

Exception in thread "main" org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: cotaçao.Cotacao.Medidas[java.lang.String] at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:1033) at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:576) at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:517) at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43) at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130) at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:316) at org.hibernate.cfg.Configuration.generateDropSchemaScript(Configuration.java:756) at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:93) at org.hibernate.tool.hbm2ddl.SchemaExport.<init>(SchemaExport.java:61) at Hibernate.GeraTabelas.main(GeraTabelas.java:14)

[quote=tetegalvao]alguem sabe fazer esse mapeamento em annotation

person [/quote]
@GenericGenerator(name="gerador", strategy="foreign", parameters={@Parameter(value= "person", name="property")} )

@Id
@GeneratedValue(generator="gerador")
@Column(name = "person_id", unique = true, nullable = false)
public Long getId()...

[quote=maschiojv][quote=tetegalvao]alguem sabe fazer esse mapeamento em annotation

person [/quote]

[code]
@GenericGenerator(name=“gerador”, strategy=“foreign”, parameters={@Parameter(value= “person”, name=“property”)} )

@Id
@GeneratedValue(generator=“gerador”)
@Column(name = “person_id”, unique = true, nullable = false)
public Long getId()…
[/code][/quote]

Só 2 anos atrazados xD

hehe, eu precurei e achei esse tópico, era exatamente o que eu queria mas não tinha a solução, dai eu coloquei :slight_smile:

maschiojv, antes tarde do que nunca certo? hehe

Estou precisando fazer exatamente isso, mas aqui nao está funcionando, poderia postar o restante do seu mapeamento com annotations?
O mapeamento de endereço em pessoa. Existe um atributo pessoa em Endereço?

Muito obrigado

Consegui fazer a relação da seguinte forma:


@Entity
@Table(name="pessoa")
public class Pessoa {
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
		
	@OneToOne
	@PrimaryKeyJoinColumn
	@Cascade(value=CascadeType.ALL)
	private Endereco endereco;

        ...
}


@Entity
@Table(name="endereco")
public class Endereco {
	
	@GenericGenerator(
		name = "gerador",
		strategy = "foreign",
		parameters = @Parameter(name = "property", value = "pessoa")
	)
	
	@Id
	@GeneratedValue(generator = "gerador")
	@Column(name = "pessoa_id")
	private Integer id;

        ...
}

Acredito que foi uma solução parecida com a sua…

O único detalhe é que gerando o banco com o hibernate ele nao gerou a FK entre pessoa e endereço, alguém sabe como fazer com que ele gere isso também?