Olá Pessoal!
Estou com um problema ao utilizar criteria em apenas um objeto (acreditem se quiser).
A princípio o objeto é simples. Segue abaixo:
Cargo
@Entity
@Table(name="tb_cargo")
public class Cargo {
private Long id;
private String nome;
private String descricao;
private Date dataAtivacao;
private Date dataInativacao;
//Niveis de ,Acesso Para o Cargo do Colaborador
private List<MetodoController> metodosController;
@Id
@GeneratedValue
@Column(name="id_cargo")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@Column(length=100, nullable=false)
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(length=100, nullable=true)
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="tb_metodo_controller_cargo",
joinColumns=@JoinColumn(name="id_cargo"),
inverseJoinColumns=@JoinColumn(name="id_metodo_controller"))
public List<MetodoController> getMetodosController() {
return metodosController;
}
public void setMetodosController(List<MetodoController> metodosController) {
this.metodosController = metodosController;
}
@Column(nullable=false)
@Temporal(TemporalType.DATE)
public Date getDataAtivacao() {
return dataAtivacao;
}
public void setDataAtivacao(Date dataAtivacao) {
this.dataAtivacao = dataAtivacao;
}
@Column(nullable=true)
@Temporal(TemporalType.DATE)
public Date getDataInativacao() {
return dataInativacao;
}
public void setDataInativacao(Date dataInativacao) {
this.dataInativacao = dataInativacao;
}
}
DAO - Estamos usando uma classe genérica, mas já realizei testes na classe DAO própria
public List<T> listar(T object){
List<T> objects = new ArrayList<T>();
criteria = session.createCriteria(object.getClass());
criteria.add(Restrictions.isNull("dataInativacao"));
objects = criteria.list();
return objects;
}
Classe Teste de Listagem
private static void listarCargo(Session session) {
List<Cargo> cargos = new ArrayList<Cargo>();
CargoDAO cargoDao = new CargoDAO(session);
cargos = cargoDao.listar(new Cargo());
System.out.println("Existem " + cargos.size() +" cargos cadastrados");
for(Cargo cargo : cargos){
for(MetodoController metodoController : cargos.get(1).getMetodosController()){
System.out.println("Cargo: " + cargos.get(1).getNome() + " | MetodoControllerCargo " + metodoController.getId() + "=> Controller: " + metodoController.getController().getNome() + " | Metodo: " + metodoController.getMetodo().getNome());
}
}
}
Output do console
Existem 2 cargos cadastrados
Cargo: Promotor | MetodoControllerCargo 1=> Controller: CargoController | Metodo: carregaCadastrar
Cargo: Promotor | MetodoControllerCargo 2=> Controller: CargoController | Metodo: cadastrar
Cargo: Promotor | MetodoControllerCargo 1=> Controller: CargoController | Metodo: carregaCadastrar
Cargo: Promotor | MetodoControllerCargo 2=> Controller: CargoController | Metodo: cadastrar
Na base de dados, apenas um cargo está cadastrado (caso perguntem: tenho certeza disso!).
Não consegui identificar o que estou fazendo de errado. Alguém poderia me dar uma luz?
Obrigado! 