[quote=Guevara]Oi joshh!
Poderia postar aqui seu form de inclusão? Estou com problemas aqui para gravar um relacionamento one-to-many, contato e mensagem.
Abraço![/quote]
Eu to fazendo em Swing, vou tentar mostrar mais ou menos como fiz.
Entidades:
//Aluno
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.curso.entity;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
/**
*
-
@author Romulo
*/
@Entity
@Table(name = “ALUNO”)
public class Aluno implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column(length=100)
private String nome;
@OneToMany(cascade=CascadeType.ALL)
private List alunoCurso = new ArrayList();
@Column(length=100)
private String cidade;
@Column(length=100)
private String endereco;
@Column(length=100)
private String bairro;
@Column(length=9)
private String cep;
@Column(length=15)
private String telefone;
@Column(length=12)
private String rg;
@Column(length=14)
private String cpf;
@Enumerated(EnumType.STRING)
private TipoSexoEnum sexo;
public Aluno() {
}
/**
- @return the id
*/
public Integer getId() {
return id;
}
/**
- @param id the id to set
*/
public void setId(Integer id) {
this.id = id;
}
/**
- @return the nome
*/
public String getNome() {
return nome;
}
/**
- @param nome the nome to set
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
- @return the cursos
*/
public List getAlunoCurso() {
return alunoCurso;
}
/**
- @param cursos the cursos to set
*/
public void setAlunoCurso(List alunoCurso) {
this.alunoCurso = alunoCurso;
}
/**
- @param cursos the cursos to set
*/
public void addAlunoCurso(AlunoCurso alunoCurso) {
this.getAlunoCurso().add(alunoCurso);
}
public void removeAlunoCurso(AlunoCurso alunoCurso) {
this.getAlunoCurso().remove(alunoCurso);
}
/**
- @return the endereco
*/
public String getEndereco() {
return endereco;
}
/**
- @param endereco the endereco to set
*/
public void setEndereco(String endereco) {
this.endereco = endereco;
}
/**
- @return the bairro
*/
public String getBairro() {
return bairro;
}
/**
- @param bairro the bairro to set
*/
public void setBairro(String bairro) {
this.bairro = bairro;
}
/**
- @return the cep
*/
public String getCep() {
return cep;
}
/**
- @param cep the cep to set
*/
public void setCep(String cep) {
this.cep = cep;
}
/**
- @return the telefone
*/
public String getTelefone() {
return telefone;
}
/**
- @param telefone the telefone to set
*/
public void setTelefone(String telefone) {
this.telefone = telefone;
}
/**
- @return the rg
*/
public String getRg() {
return rg;
}
/**
- @param rg the rg to set
*/
public void setRg(String rg) {
this.rg = rg;
}
/**
- @return the cpf
*/
public String getCpf() {
return cpf;
}
/**
- @param cpf the cpf to set
*/
public void setCpf(String cpf) {
this.cpf = cpf;
}
/**
- @return the sexo
*/
public TipoSexoEnum getSexo() {
return sexo;
}
/**
- @param sexo the sexo to set
*/
public void setSexo(TipoSexoEnum sexo) {
this.sexo = sexo;
}
/**
- @return the cidade
*/
public String getCidade() {
return cidade;
}
/**
- @param cidade the cidade to set
*/
public void setCidade(String cidade) {
this.cidade = cidade;
}
}
[/code]
//AlunoCurso
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.curso.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
*
-
@author PHeleN
*/
@Entity
public class AlunoCurso implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@ManyToOne()
@JoinColumn(name=“aluno_id”)
private Aluno aluno;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name=“curso_id”)
private Curso curso;
@Temporal(TemporalType.DATE)
private Date dtMatricula;
@Enumerated(EnumType.STRING)
private TipoStatusAlunoCursoEnum status;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 0;
hash += (id != null ? id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won’t work in the case the id fields are not set
if (!(object instanceof AlunoCurso)) {
return false;
}
AlunoCurso other = (AlunoCurso) object;
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public String toString() {
return “br.com.curso.entity.NewEntity[id=” + id + “]”;
}
/**
- @return the aluno
*/
public Aluno getAluno() {
return aluno;
}
/**
- @param aluno the aluno to set
*/
public void setAluno(Aluno aluno) {
this.aluno = aluno;
}
/**
- @return the curso
*/
public Curso getCurso() {
return curso;
}
/**
- @param curso the curso to set
*/
public void setCurso(Curso curso) {
this.curso = curso;
}
/**
- @return the Matricula
*/
public Date getDtMatricula() {
return dtMatricula;
}
/**
- @param Matricula the Matricula to set
*/
public void setDtMatricula(Date Matricula) {
this.dtMatricula = Matricula;
}
/**
- @return the status
*/
public TipoStatusAlunoCursoEnum getStatus() {
return status;
}
/**
- @param status the status to set
*/
public void setStatus(TipoStatusAlunoCursoEnum status) {
this.status = status;
}
}
[/code]
//GenericDao
[code]package br.com.curso.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public interface GenericDAO<T, ID extends Serializable> {
public void destroy();
public T inserir(T entity) throws Exception;
public T atualizar(T object) throws Exception;
public void excluir(T object) throws Exception;
public Long getSelectMax(String query);
public Long getSelectMax(String query, Map<String, Object> params);
public Integer getCount(String query);
public Integer getCount(String query, Map<String, Object> params);
public List<T> getNamedQuery(String namedQuery);
public List<T> getTodos();
public List<T> getTodos(String ordem);
public T pesquisarPorId(ID id);
public List<T> listPesq(String query);
public List<T> listPesqParam(String query, Map<String, Object> params);
public List<T> listPesqParam(String query, Map<String, Object> params, int maximo, int atual);
public T pesqParam(String query, Map<String, Object> params);
}
[/code]
//GenericDaoimpl
[code]package br.com.curso.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;
public class GenericDAOImpl<T, ID extends Serializable> implements GenericDAO<T, ID> {
private static EntityManagerFactory factory;
private Class<T> tipoClasse;
@SuppressWarnings("unchecked")
public GenericDAOImpl(Class classe){
//tipoClasse = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
tipoClasse = classe;
}
public void destroy() {
EntityManager manager = getEntityManagerInstance();
manager.close();
if (factory.isOpen())
factory.close();
System.out.println("destruindo factory...");
}
private EntityManager getEntityManagerInstance() {
if(GenericDAOImpl.factory == null ){
GenericDAOImpl.factory = Persistence.createEntityManagerFactory("CursoPU");
}
return GenericDAOImpl.factory.createEntityManager();
}
/** Insere a classe passada como parametro no banco de dados */
public T inserir(T entity) throws Exception{
EntityManager manager = getEntityManagerInstance();
EntityTransaction trans = manager.getTransaction();
trans.begin();
manager.persist(entity);
trans.commit();
manager.close();
return entity;
}
/** Atualiza a classe passada como parametro no banco de dados */
public T atualizar(T object) throws Exception {
EntityManager manager = getEntityManagerInstance();
EntityTransaction trans = manager.getTransaction();
trans.begin();
manager.merge(object);
trans.commit();
manager.close();
return object;
}
/** Exclui a classe passada como parametro no banco de dados */
public void excluir(T object) throws Exception{
EntityManager manager = getEntityManagerInstance();
EntityTransaction trans = manager.getTransaction();
trans.begin();
if (!manager.contains(object)) //se o objeto n�o estiver persistente
object = manager.merge(object);
manager.remove(object);
trans.commit();
manager.close();
}
/** Retorna o maior id
* @param String - query
* @return Long
* */
public Long getSelectMax(String query) {
EntityManager manager = getEntityManagerInstance();
Query q = manager.createQuery(query);
Long i = (Long) q.getSingleResult();
if (i == null)
i = 0L;
manager.close();
return i + 1;
}
/** Retorna o maior id
* @param String - query
* @param Map<String, Object> - parametros da query
* @return Long
* */
public Long getSelectMax(String query, Map<String, Object> params) {
EntityManager manager = getEntityManagerInstance();
Query q = manager.createQuery(query);
for (String chave : params.keySet()) {
q.setParameter(chave, params.get(chave));
}
Long i = (Long) q.getSingleResult();
if (i == null)
i = 0L;
manager.close();
return i + 1;
}
/** Retorna o total de resultados da consulta
* @param String - query
* @return Integer - total
* */
public Integer getCount(String query) {
EntityManager manager = getEntityManagerInstance();
Query q = manager.createQuery(query);
Integer i = (Integer) q.getSingleResult();
manager.close();
return i;
}
/** Retorna o total de resultados da consulta
* @param String - query
* @param Map<String, Object> - parametros da query
* @return Integer - total
* */
public Integer getCount(String query, Map<String, Object> params) {
EntityManager manager = getEntityManagerInstance();
Query q = manager.createQuery(query);
for (String chave : params.keySet()) {
q.setParameter(chave, params.get(chave));
}
long i = (Long) q.getSingleResult();
Integer x = (int) i;
manager.close();
return x;
}
/** Retorna a pesquisa por ID (chave prim�ria - composta ou n�o)
* @return - Retorna a classe
* */
public T pesquisarPorId(ID id) {
EntityManager manager = getEntityManagerInstance();
T object = manager.find(tipoClasse, id);
//manager.close();
return object;
}
/** Retorna um List com o resultado de um select do nome da namedQuery passado por parametro
* @return List<generico>
* */
@SuppressWarnings("unchecked")
public List<T> getNamedQuery(String namedQuery) {
EntityManager manager = getEntityManagerInstance();
Query query = manager.createNamedQuery(namedQuery);
List<T> lista = query.getResultList();
//manager.close();
return lista;
}
/** Retorna um List com o resultado de um select * from...
* @return List<generico>
* */
@SuppressWarnings("unchecked")
public List<T> getTodos() {
EntityManager manager = getEntityManagerInstance();
String queryS = "SELECT obj FROM " + tipoClasse.getSimpleName()+ " obj";
Query query = manager.createQuery(queryS);
List<T> lista = query.getResultList();
//manager.close();
return lista;
}
/** Retorna um List com o resultado de um select * from...
* @param String criterio(s) de ordena��o
* @return List<generico>
* */
@SuppressWarnings("unchecked")
public List<T> getTodos(String ordem) {
EntityManager manager = getEntityManagerInstance();
String queryS = "SELECT obj FROM " + tipoClasse.getSimpleName()+ " obj ORDER BY obj." + ordem;
Query query = manager.createQuery(queryS);
List<T> lista = query.getResultList();
//manager.close();
return lista;
}
/** Retorna um List com o resultado da consulta passada por parametro
* @param String query
* @return List<generico>
* */
@SuppressWarnings("unchecked")
public List<T> listPesq(String query) {
EntityManager manager = getEntityManagerInstance();
Query q = manager.createQuery(query);
List<T> lista = q.getResultList();
//manager.close();
return lista;
}
/** Retorna um List com o resultado da consulta passada por parametro
* @param String query
* @param Map<String, Object> - parametros da query
* @return List<generico>
* */
@SuppressWarnings("unchecked")
public List<T> listPesqParam(String query, Map<String, Object> params) {
EntityManager manager = getEntityManagerInstance();
Query q = manager.createQuery(query);
for(String chave : params.keySet()){
q.setParameter(chave, params.get(chave));
}
List<T> lista = q.getResultList();
//manager.close();
return lista;
}
/** Retorna um List com o resultado da consulta passada por parametro
* @param String query
* @param Map<String, Object> - parametros da query
* @param int maximo - maximo de resultados
* @param int atual - iniciando em atual
* @return List<generico>
* */
@SuppressWarnings("unchecked")
public List<T> listPesqParam(String query, Map<String, Object> params,
int maximo, int atual) {
EntityManager manager = getEntityManagerInstance();
Query q = manager.
createQuery(query).
setMaxResults(maximo).
setFirstResult(atual);
for(String chave : params.keySet()){
q.setParameter(chave, params.get(chave));
//System.out.println("param=" + params.get(chave));
}
List<T> lista = q.getResultList();
//manager.close();
return lista;
}
/** Retorna uma Classe com o resultado da consulta passada por parametro
* @param String query
* @param Map<String, Object> - parametros da query
* @return Classe<generica>
* */
@SuppressWarnings("unchecked")
public T pesqParam(String query, Map<String, Object> params) {
EntityManager manager = getEntityManagerInstance();
Query q = getEntityManagerInstance().createQuery(query);
for(String chave : params.keySet())
q.setParameter(chave, params.get(chave));
try {
T object = (T) q.getSingleResult();
//manager.close();
return object;
}
catch(NoResultException nre) {
manager.close();
return null;
}
}
}
[/code]
//AlunoController
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.curso.controller;
import br.com.curso.dao.GenericDAO;
import br.com.curso.dao.GenericDAOImpl;
import br.com.curso.entity.Aluno;
import br.com.curso.entity.AlunoCurso;
import br.com.curso.ferramentas.GLista;
import br.com.curso.ferramentas.GListaImp;
import java.util.List;
import java.util.Map;
/**
*
-
@author PHeleN
*/
public class AlunoController {
GenericDAO<Aluno, Integer> alunoDAO = new GenericDAOImpl<Aluno, Integer>(Aluno.class);
GLista lista = new GListaImp(Aluno.class);
private Aluno selecionado;
public AlunoController() {
lista.setList(alunoDAO.getTodos());
selecionado = lista.first();
}
//Manter cadastro Aluno
public void adicionarAluno(Aluno aluno) throws Exception {
alunoDAO.inserir(aluno);
}
public void removerAluno(Aluno aluno) throws Exception {
alunoDAO.excluir(aluno);
}
public void editarAluno(Aluno aluno) throws Exception {
alunoDAO.atualizar(aluno);
}
public void removerAluno() throws Exception {
alunoDAO.excluir(selecionado);
}
public void editarAluno() throws Exception {
alunoDAO.atualizar(selecionado);
}
// ### Fim Manter cadastro Aluno
public void atualizar() {
lista.setList(alunoDAO.getTodos());
setSelecionado(lista.first());
}
public List getTodos() {
return alunoDAO.getTodos();
}
public List pesquisarParam(String query,Map<String, Object> params) {
return alunoDAO.listPesqParam(query, params);
}
public void primeiro() {
selecionado = lista.first();
}
public void ultimo() {
selecionado = lista.last();
}
public void avancar() {
selecionado = lista.next();
}
public void voltar() {
selecionado = lista.prior();
}
/**
- @return the selecionado
*/
public Aluno getSelecionado() {
return selecionado;
}
/**
- @param selecionado the selecionado to set
*/
public void setSelecionado(Aluno selecionado) {
this.selecionado = selecionado;
}
public void removerAlunoCurso(AlunoCurso alunoCurso) {
if (selecionado != null) {
selecionado.removeAlunoCurso(alunoCurso);
alunoCurso.setAluno(null);
}
}
}
[/code]
//Agora vem a parte no meu JForm onde eu passo o Curso para a lista de cursos do aluno
atualizaObjeto(alunosController.getSelecionado()); //Atualizo objeto selecionado
FAlunoCurso fAlunoCurso = new FAlunoCurso(this,true,alunosController.getSelecionado());//Crio JForm passando o objeto aluno que estou editando/criando
fAlunoCurso.setLocationRelativeTo(this);
fAlunoCurso.setVisible(true);
if (fAlunoCurso.getSelecionado() != null)
alunosController.getSelecionado().addAlunoCurso(fAlunoCurso.getSelecionado()); //adiciono no aluno curso
atualizaCampos();
fAlunoCurso = null;
//Objeto que é retornado do fAlunoCurso
selecionado = new AlunoCurso();
selecionado.setAluno(aluno);
selecionado.setCurso((Curso)cCurso.getSelectedItem());
selecionado.setDtMatricula(Data.stringToDate(eData.getText()));
selecionado.setStatus((TipoStatusAlunoCursoEnum)cStatus.getSelectedItem());
//Ação Gravar do JForm Alunos. Ao gravar esse form ele grava automaticamente tudo que está na lista dos alunos.
Boolean erro = false;
Aluno selecionado = alunosController.getSelecionado();
try {
atualizaObjeto(selecionado);
if (incluir)
alunosController.adicionarAluno(selecionado);
else alunosController.editarAluno(selecionado);
alunosController.atualizar();
alunosController.setSelecionado(selecionado);
atualizaCampos();
} catch (Exception e) {
aviso(e.getMessage(),Color.RED);
erro = true;
}
if (!erro)
aviso("Gravado com sucesso!",Color.GREEN);