Hibernate - ER , Duvida no Mapeamento das FK

3 respostas
mausexdd

Bom tenho o seguinte problema , estou tendo duvidas na hora de Mapear minhas tabelas no Hibernate ,
eu sei oque quero fazer mais estou me confundindo , nao estou conseguindo ussar corretamente a ferramenta.
PS*(Comecei ussar Hibernate agora , desde ja desculpe pela simples duvida)

Ok Vamos lá

Tenho Três Tabelas/Classes Produto , Movimentação (que pode ser compra ou venda de um Produto) , e Relacionamento

Pelo que pensei tenho que ter uma FK de Produto e Movimentação em Relacionamento , para que depois eu consiga trazer todos os dados Ussando a Classe Relacionamento

ok!

.Minha Classe Relacionamento :

@Entity
public class Relacionamento {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer codigo;
	@Column
	private Integer quantidadeProdutos;
	@ManyToOne //Many -Produtos - para - Lista = ONE - Seria isto? Em um Relacionamento Muitos Produtos podem conter 1 lista por vez;
	@JoinColumn(name = "codigo_Produto")
	private List<Produtos> conjuntoDeProdutos;a
	@OneToMany//e na minha movimentação ,  posso ter um tipo de movimentação[VENDA ou COMPRA] seria @OneToMany
	@JoinColumn(name = "codigo_Movimentacao")
	private Movimentacao movimentacao;

}

Minha classe Produto

@Entity
@Table(name = "PRODUTOS")
@NamedQueries(value = { @NamedQuery(name = "Produtos.RecuperaPorDesc", query = "from Produtos p where p.descricao= :desc") })
public class Produtos {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer codigo;

	@Column
	private String descricao;

	@Column
	private String tipoUnidade;

	@Column
	private Double precoUnidade;
	@ManyToOne //Muitos Produtos podem ser colocados la na minha lista do relacionamento.. Seria Isto?
	@JoinColumn(name = "codigo_Relacionamento")
	private Relacionamento relacionamento;

Minha Classe Movimentacao

@Entity
public class Movimentacao {
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private String codigo;
	@Column
	private String tipoMovimentacao;
	@Column
	private Date data;
	@OneToOne
	@JoinColumn(name = "codigo_Relacionamento")
	private Relacionamento relacionamento;

**Getters e Setters Ocultados.

Está Dando erro na hora de criar as tabelas no banco , ja chequei a conexao, e mapeamento das entidades no XML …
o relacionamento seria este mesmo?

3 Respostas

mausexdd

Ta Criando 2 Tabelas relacionamento uma ta certa a outra muito estranha as coluns ,
e a tabela Movimentacao nao esta sendo criada.,

RafaelCassau

boa noite mausexdd olhando as classes acho q consegui visualizar um erro, na sua Classe “Relacionamento” você esta dizendo que um “Relacionamento” pode ter muitas movimentações, mais você não criou um “List” a maneira correta seria assim:

@Entity  
    public class Relacionamento {  
        @Id  
        @GeneratedValue(strategy = GenerationType.AUTO)  
        private Integer codigo;  
        @Column  
        private Integer quantidadeProdutos;  
        @ManyToOne //Many -Produtos - para - Lista = ONE - Seria isto? Em um Relacionamento Muitos Produtos podem conter 1 lista por vez;  
        @JoinColumn(name = "codigo_Produto")  
        private List<Produtos> conjuntoDeProdutos;a  
        @OneToMany//e na minha movimentação ,  posso ter um tipo de movimentação[VENDA ou COMPRA] seria @OneToMany  
        @JoinColumn(name = "codigo_Movimentacao")  
        private List<Movimentacao> movimentacoes; // você estava definindo um relacionamento "Muitos" para Movimentacao sem criar um List<>  
      
    }
RafaelCassau

Seguindo o contexto do exercicio proposto as classes ficariam assim:

Produto:

@Entity
@Table(name = "simuladoProva2_produto")
@NamedQueries({
	@NamedQuery(name = "Listar.TodosProdutos", query = "from Produtos"),
	@NamedQuery(name = "Listar.ProdutosPorDescricao", query = "from Produtos p where p.descricao = :descricao")
})
public class Produtos {
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer produtoID;
	@Column
	private String descricao;
	@Column
	private String unidadeTipo;
	@Column
	private Double preco;
}

Movimentacao:

@Entity
@Table(name = "simuladoProva2_movimentacao")
@NamedQueries({
	@NamedQuery(name = "Listar.MovimentacaoPorData", query = "from Movimentacao"),
	@NamedQuery(name = "Listar.MovimentacaoPorTipo", query = "from Movimentacao m where m.movimentacaoTipo = :movimentacaoTipo")
})
public class Movimentacao {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer movimentacaoID;
	@Column
	private Date dataMovimentacao;
	@Column
	private String movimentacaoTipo;
	@OneToMany (fetch = FetchType.LAZY)
	@JoinColumn(name = "fk_movimentacao")
	private List<MovimentacaoProduto> produtos;
}

MovimentacaoProduto

@Entity
@Table(name = "simuladoProva2_movimentacao_produto")
@NamedQueries({
	
})
public class MovimentacaoProduto {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Integer movimentacaoProdutoID;
	@ManyToOne
	@JoinColumn(name = "fk_movimentacao")
	private Movimentacao movimentacao;
	@ManyToOne
	@JoinColumn(name = "fk_produto")
	private Produtos produto;
	@Column
	private Integer quantidade;
}

espero ter ajudado, ou esclarecido alguma duvida, boa prova amanha! abraços.

Criado 7 de julho de 2011
Ultima resposta 7 de jul. de 2011
Respostas 3
Participantes 2