Cumprimentos a todos e boa tarde!! Pessoa é o seguinte, estou testando alguns exemplos aki sobre hibernate e deparei com a seguinte questao:
Tenho duas classes: EntidadeUm e EntidadeDois representadas no banco pelas tabelas entidadeum e entidadedois respectivamente com relacionamento N:M. Elas estao escrita e mapeadas da seguinte forma:
Class EntidadeUm
@Entity
@Table(name="entidadeum")
public class EntidadeUm {
@Id
@Column(name="CODIGO")
private int codigo;
@Column(name="NOME")
private String nome;
@ManyToMany(targetEntity= br.com.bean.EntidadeDois.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="entidadeum_has_entidadedois", // tabela N:M do banco
joinColumns = @JoinColumn( name="entidadeum_codigo", referencedColumnName="codigo"), //key estrangeira da entidadeUm dentro da tabela N:M
inverseJoinColumns = @JoinColumn(name="entidadedois_codigo",referencedColumnName="codigo") //key estrangeira da entidadeDois dentro da tabela N:M
)
/* Pq o hibernate nao consegue persistir esse conjunto de obj no banco no momento da inserção?*/
private List<EntidadeDois> vetEntidadeDois;
public EntidadeUm() {
}
// get's e set's
}
Class EntidadeDois
@Entity
@Table(name="entidadedois")
public class EntidadeDois {
/** Creates a new instance of EntidadeDois */
@Id
@Column(name="CODIGO")
private int codigo;
@Column(name="NOME")
private String nome;
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "vetEntidadeDois", //atributo do obj EntidadeUm mapeado neste obj
targetEntity = br.com.bean.EntidadeUm.class
)
private List<EntidadeUm> vetEntidadeUm;
public EntidadeDois() {
}
//get's e set's
}
Action que cria os obj e persiste no banco
/* Essa action realiza a criaçao dos obj e chama os metodos para inserir/consultar*/
public class TesteAction extends Action {
/* forward name="success" path="" */
private final static String SUCCESS = "success";
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
String codigo = request.getParameter("txtCodigo");
if(codigo.equals("1"))
{
List<EntidadeDois> list = new ArrayList();
EntidadeUmDAO entDao = new EntidadeUmDAO();
EntidadeDois ent1 = new EntidadeDois();
ent1.setCodigo(1);
ent1.setNome("um");
list.add(ent1);
EntidadeDois ent2 = new EntidadeDois();
ent2.setCodigo(2);
ent2.setNome("dois");
list.add(ent2);
EntidadeDois ent3 = new EntidadeDois();
ent3.setCodigo(3);
ent3.setNome("tres");
list.add(ent3);
EntidadeDois ent4 = new EntidadeDois();
ent4.setCodigo(4);
ent4.setNome("quatro");
list.add(ent4);
EntidadeDois ent5 = new EntidadeDois();
ent5.setCodigo(5);
ent5.setNome("cinco");
list.add(ent5);
EntidadeUm teste = new EntidadeUm();
teste.setCodigo(1);
teste.setNome("testando");
teste.setVetEntidadeDois(list); // seta a lista de obj criados e adicionados no passo anterior.
/*persiste no banco a EntidadeUm representado pelo obj teste.Neste caso, o hibernate nao persiste
a lista de objetos do vetor.Pq isso ocorre??*/
entDao.salvarEntidadeUm(teste);
}
else
{
EntidadeUmDAO entDao = new EntidadeUmDAO();
entDao.consultarEntidadeUm(1);
}
return mapping.findForward(SUCCESS);
}
}
Conforme exposto acima, pq o hibernate nao consegue persistir/gravar o vetEntidadeDois no banco?? Existe alguma algo errado no mapeamento??
A resposta desejada seria que ele povoasse a entidadeum no banco com os dados setados, povoasse a entidadedois com os obj’s que encontram-se no vetEntidadeDois e povoasse a tabela entidadeum_has_entidadedois com as respectivas chaves primarias das tabela entidadeum e entidadedois, criando o mapeamento N:M.
Quem puder ajudar ai agradeço.
valeu