JPA dúvida sobre ManyToMany

Bem pessoal,

No meu modelo do banco de dados tive um caso de um tabela many to many! ai nesse caso temos que criar uma tabela que liga as duas entidades

até ai tudo bem o proprio netbeans decidi como fazer… ele não cria a tabela de ligação entre as entidades ManyToMany certo??

Ai pra testar eu fiz o seguinte…

Peguei a minha classe Que se Chama Reserva que terá sempre uma coleção de Quartos que é outra Classe

Então o relacionamento fica Muitos pra muitos

Pois uma Reserva pode ter n quartos e um Quarto pode estar contido em n reservas…

Eu criei no meu tste aqui um objeto reserva populei os atributos necessarios, criei a coleção de quartos e setei ela!

mandei persistir e ele só gravou os dados da Reserva na tabela Reserva e não criou nada na minha tabela de ligação que fala quais quartos estao contido em determinada reserva.

como uso o manytomany! tem algo que esqueci de fazer?

Acho que é isto que você quer fazer:

@Entity
@Table(name = "QUARTO")
public class Quarto {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "ID")
	private Long id;

}

@Entity
@Table (name="RESERVA")
public class Reserva {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="ID")
	private Long id;

	@ManyToMany
	@JoinTable(
	        name="RES_QUA",
	        joinColumns=@JoinColumn(name="RES_ID", referencedColumnName="ID"),
	        inverseJoinColumns=@JoinColumn(name="QUA_ID", referencedColumnName="ID")
	    )	
	private Collection<Quarto> quartos;

}

[]´s
:lol:

[quote=AvilaCS]Acho que é isto que você quer fazer:

@Entity
@Table(name = "QUARTO")
public class Quarto {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "ID")
	private Long id;

}

@Entity
@Table (name="RESERVA")
public class Reserva {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name="ID")
	private Long id;

	@ManyToMany
	@JoinTable(
	        name="RES_QUA",
	        joinColumns=@JoinColumn(name="RES_ID", referencedColumnName="ID"),
	        inverseJoinColumns=@JoinColumn(name="QUA_ID", referencedColumnName="ID")
	    )	
	private Collection<Quarto> quartos;

}

[]´s
:lol:

[/quote]]

engraçado que o netbeans criou esse codigo do lado da entidade quartos, e nao da reservas!

e se eu coloco la fala da um warning na anotação

Informacao de uniao esta especificado em um lado nao pertencente da uniao

o que será ein…

Vc está com um probleminha de negócio na sua aplicação. O ManyToMany tem que ficar do lado responsável pelo relacionamento. No seu código, o ManyToMany está em quarto, e no entanto vc manda persistir uma reserva com uma Collection de quartos! Tenta fazer com o código igual do AvilaCS, ou inverte a lógica da sua aplicação, o lado que está o ManyToMany é muito importante, evite ficar usando código gerado automaticamente pra esse tipo de coisa…

OBS: Cuidado com o erro “object references an unsaved transient instance - save the transient instance before flushing”. Tem tudo pra acontecer numa aplicação desse tipo.

A relação Quartoxreserva tem que ser mesmo ManyToMany?
Se vc considerar a data na reserva vc não elimina essa necessidade?