Duvida auto-relacionamento hibernate/er

6 respostas
R

Pessoal,

Estou com duvida de como mapear no Hibernate (c duvidar ateh no mapemaento ER to fazendo merda) da seginte situacao, um produto pode ter varias sugestoes de produtos, por exemplo uma certa macorronada pode ter 3 vinhos de sugestoes para acompanhamento, minha primeira tentaiva foi criar uma nova tabela chamada sugestao, colocando e colunas, 1 o id, 2 o produto, e 3 a sugestao, soh que o hibernate nao deixa duas colunas com a mesma FK, alguma sugestao?

mapeamento Tabela sugestoes:

@Entity
@Table(name="sugestoes")
public class Sugestoes implements Serializable {
	
	private static final long serialVersionUID = -1884255788551014227L;

	@Id
	@GeneratedValue
	private Integer idSugestao;
	
	@ManyToOne
	@JoinColumn(name="idProduto")
	private Produto produto;
	
	@ManyToOne
	@JoinColumn(name="idProduto")
	private Produto sugestao;

mapeamento tabela produtos

public class Produto implements Serializable {

	private static final long serialVersionUID = 700676997300885309L;

	@Id
	@GeneratedValue
	private Integer idProduto;
	
	
	@OneToMany(cascade={CascadeType.REMOVE,CascadeType.PERSIST},
			fetch = FetchType.LAZY,
			mappedBy="produto")
	private List<Sugestoes> sugestoes;

6 Respostas

Hebert_Coelho

Qual o erro que acontece do modo como está?

OBS.: fetch = FetchType.LAZY já é o padrão quando o relacionamento termina em LAZY

R
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: eBistro.sugestoes.Sugestoes column: idProduto (should be mapped with insert="false" update="false")
	at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:676)
	at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:698)
	at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:720)
	at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:474)
	at org.hibernate.mapping.RootClass.validate(RootClass.java:236)
	at org.hibernate.cfg.Configuration.validate(Configuration.java:1193)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1378)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:954)
	at eBistro.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:17)
	... 14 more

soh que se eu coloco o mapeamento insert=“false” update=“false” os dados nao sao salvos na tabela :stuck_out_tongue:

Hebert_Coelho

A tá, agora que eu vi o problema.

Pq você não coloca os JoinColumns com nomes diferentes?

R

huuuum
como eu faria entao para dizer que o produto e a sugestao da tabela sugestao sao chaves estrangeiras para idProduto?

Hebert_Coelho

Cara, dá uma linda nesse post para você entender como funciona o relacionamento e o que significa o @JoinColumn. @OneToMany e @ManyToOne Unidirecional e Bidirecional

Você tentou colocar dois nomes diferentes? Deu oq?

R

Eh realmente estava fazendo besteira … brigadao ai …

@Entity
@Table(name="sugestoes")
public class Sugestoes implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -1884255788551014227L;

	@Id
	@GeneratedValue
	private Integer idSugestao;
	
	@ManyToOne
	@JoinColumn(name="produto")
	private Produto produto;
	
	@ManyToOne
	@JoinColumn(name="sugestao")
	private Produto sugestao;
Criado 13 de junho de 2012
Ultima resposta 13 de jun. de 2012
Respostas 6
Participantes 2