Relacionamento com Annotation

3 respostas
caiogama

Galera,

Sou novo nessa coisa de Annotation e estou apanhando feio dessa parte de relacionamento entre as classes, aquele @OneToMay, @ManyToOne e pra gerar tabelas com chave composta

Já pesquisei aqui, mas não acho em lugar algum um site que consiga me explicar como isso funciona.

Alguém tem uma indicação?

ou pode dar uma força com algum exemplo?

Obrigadão!!
Caio.

3 Respostas

P

http://www.guj.com.br/posts/list/201812.java#1019280

caiogama

Li o tópico que você passou mas continuo com os seguintes erros:

create table Sistemas-Grupos (
        cd_sistema integer,
        cd_grupo integer,
        primary key (cd_sistema, cd_grupo)
    )
ERROR [main] (SchemaExport.java:274) - Unsuccessful: create table Sistemas-Grupos (cd_sistema integer, cd_grupo integer, primary key (cd_sistema, cd_grupo))
ERROR [main] (SchemaExport.java:275) - [MySQL][ODBC 5.1 Driver][mysqld-5.1.50-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-Grupos (cd_sistema integer, cd_grupo integer, primary key (cd_sistema, cd_grupo' at line 1
alter table Sistemas-Grupos 
        add index FKCD28BFE6ED7BDC6A (cd_grupo), 
        add constraint FKCD28BFE6ED7BDC6A 
        foreign key (cd_grupo) 
        references Grupo (cd_grupo)
ERROR [main] (SchemaExport.java:274) - Unsuccessful: alter table Sistemas-Grupos add index FKCD28BFE6ED7BDC6A (cd_grupo), add constraint FKCD28BFE6ED7BDC6A foreign key (cd_grupo) references Grupo (cd_grupo)
ERROR [main] (SchemaExport.java:275) - [MySQL][ODBC 5.1 Driver][mysqld-5.1.50-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-Grupos add index FKCD28BFE6ED7BDC6A (cd_grupo), add constraint FKCD28BFE6ED7BDC' at line 1

    alter table Sistemas-Grupos 
        add index FKCD28BFE6549FD1DC (cd_sistema), 
        add constraint FKCD28BFE6549FD1DC 
        foreign key (cd_sistema) 
        references Sistemas (cd_sistema)
ERROR [main] (SchemaExport.java:274) - Unsuccessful: alter table Sistemas-Grupos add index FKCD28BFE6549FD1DC (cd_sistema), add constraint FKCD28BFE6549FD1DC foreign key (cd_sistema) references Sistemas (cd_sistema)
ERROR [main] (SchemaExport.java:275) - [MySQL][ODBC 5.1 Driver][mysqld-5.1.50-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-Grupos add index FKCD28BFE6549FD1DC (cd_sistema), add constraint FKCD28BFE6549F' at line 1

e abaixo segue o código das classes

package pojo;

import java.io.Serializable;
import java.util.Collection;

import javax.persistence.*;

import org.hibernate.annotations.Cascade;

@Entity
@Table(name="Grupo")
public class Grupo  implements Serializable
{
	@Id
	@SequenceGenerator(name = "cd_grupo", sequenceName="cd_grupo_seq", allocationSize=1)
	@GeneratedValue(strategy = GenerationType.IDENTITY,generator="cd_grupo")
	@Column(name = "cd_grupo", nullable = false, unique = true)
	private int cd;
	@Column(name = "nm_nome")
	String nome;
	@Column(name = "nm_desc")
	String desc;
	@Column(name = "cd_gerente")
	int cd_gerente;
	@ManyToMany(fetch=FetchType.LAZY)
	@JoinTable(name="Sistemas-Grupos", joinColumns={@JoinColumn(name="cd_grupo")},
			inverseJoinColumns={@JoinColumn(name="cd_sistema")})
	@Cascade(org.hibernate.annotations.CascadeType.ALL)
	private Collection<Sistema> sistema;
	
	public Grupo(){}
	
	public Grupo(String nome, String desc)
	{
		this.setNome(nome);
		this.setDesc(desc);
	}
	
	
	public int getCd() {
		return cd;
	}
	public void setCd(int cd) {
		this.cd = cd;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public int getCd_gerente() {
		return cd_gerente;
	}
	public void setCd_gerente(int cd_gerente) {
		this.cd_gerente = cd_gerente;
	}
	
	
}
package pojo;

import javax.persistence.*;

import org.hibernate.annotations.Cascade;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;

@Entity
@Table(name = "Sistemas")
public class Sistema implements Serializable{

	@Id
	@SequenceGenerator(name="cd_sistema", sequenceName="cd_sistema_seq",allocationSize=1)
	@GeneratedValue(strategy = GenerationType.IDENTITY, generator="cd_sistema")
	@Column(name = "cd_sistema", nullable = false, unique = true)
	private int cd;
	@Column(name = "nm_sistema")
	private String nome;
	@Column(name = "desc_sistema")
	private String desc;
	@Column(name = "dt_criacao")
	private Date dataCriacao;
	@ManyToMany(fetch=FetchType.LAZY)
	@JoinTable(name="Sistemas-Grupos", joinColumns={@JoinColumn(name="cd_sistema")},
			inverseJoinColumns={@JoinColumn(name="cd_grupo")})
	@Cascade(org.hibernate.annotations.CascadeType.ALL)
	private Collection<Grupo> grupo;
	
	public Sistema(){} 
	
	public Sistema(String nome)
	{
		this.setNome(nome);
	}
	
	public int getCd() {
		return cd;
	}
	public void setCd(int cd) {
		this.cd = cd;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDesc() {
		return desc;
	}
	public void setDesc(String desc) {
		this.desc = desc;
	}
	public Date getDataCriacao() {
		return dataCriacao;
	}
	public void setDataCriacao(Date dataCriacao) {
		this.dataCriacao = dataCriacao;
	}
	
}
package pojo;

import javax.persistence.CascadeType;
import javax.persistence.Embeddable;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import org.hibernate.annotations.Cascade;


@Embeddable
public class SistemaGrupoPK {

	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="cd_sistema")
	@Cascade(org.hibernate.annotations.CascadeType.ALL)
	private Sistema sistema;
	
	@ManyToOne(fetch=FetchType.EAGER)
	@JoinColumn(name="cd_grupo")
	@Cascade(org.hibernate.annotations.CascadeType.ALL)
	private Grupo grupo;
}
package pojo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
@Table(name = "Sistemas-Grupos")
public class SistemaGrupo implements Serializable{

	@EmbeddedId
	private SistemaGrupoPK chaveComposta;

	public SistemaGrupo(){}	
}

Alguém sabe me dizer o por que dos erros? Já rodei a internet inteira e aind anão consegui arrumar!!

P

Seguinte, como você já tem esse mapeamento

#   @ManyToMany(fetch=FetchType.LAZY)  
#     @JoinTable(name="Sistemas-Grupos", joinColumns={@JoinColumn(name="cd_grupo")},  
#             inverseJoinColumns={@JoinColumn(name="cd_sistema")})  
#     @Cascade(org.hibernate.annotations.CascadeType.ALL)  
#     private Collection<Sistema> sistema;  
#

Acho que não há necessidade de mapear Sistemas-Grupos, que é apenas uma tabela “intermediária”.

Criado 22 de outubro de 2010
Ultima resposta 25 de out. de 2010
Respostas 3
Participantes 2