Olá,
Tenho esse relacionamento:
Departamento.java
public class Departamento
{
private Long id;
private String nome;
private Date dataCriacao;
private Date dataAlteracao;
private List<Recurso> cargos;
@OneToMany(targetEntity=Cargo.class, mappedBy="departamento", fetch=FetchType.EAGER)
@JoinColumn(name="fk_depId")
public List<Recurso> getCargos()
{
return cargos;
}
public void setCargos(List<Recurso> cargos)
{
this.cargos = cargos;
}
}
Cargo.java
public class Cargo implements Recurso
{
private Long id;
private String nome;
private double valorHora;
private Date dataCriacao;
private Date dataAlteracao;
private Empresa empresa;
private Fornecedor fornecedor;
private Departamento departamento;
private List<Funcionario> funcionarios;
@ManyToOne(targetEntity=Departamento.class)
@JoinColumn(name="fk_depId")
@ForeignKey(name="dep_id")
public Departamento getDepartamento()
{
return departamento;
}
public void setDepartamento(Departamento departamento)
{
this.departamento = departamento;
}
}
Fornecedor.java
public class Fornecedor
{
private Long id;
private String apelido;
private String razaoSocial;
private Date dataCriacao;
private Date dataAlteracao;
private List<Cargo> cargos;
@OneToMany(mappedBy="fornecedor", targetEntity=Cargo.class, fetch=FetchType.EAGER)
public List<Cargo> getCargos()
{
return cargos;
}
public void setCargos(List<Cargo> cargos)
{
this.cargos = cargos;
}
}
*obs.: coloquei apenas os relacionamentos necessários para a pergunta
Departamento 1 : N Cargo
Cargo 1 : 1 Fornecedor
Cargo 1 : 1 Empresa
Ou seja, o Cargo pertence a Fornecedor OU a Empresa.
Estou tentando atualmente esta query para fazer a consulta de todos os departamentos onde o FORNECEDOR do cargo seja NULL:
@SuppressWarnings("unchecked")
public List<Departamento> listarPorCargoInterno()
{
Criteria crit = getSession().createCriteria(getPersistentClass());
crit.add(Restrictions.isNull("cargos")).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
return (List<Departamento>) crit.list();
}
Já tentei outras maneiras tb, mas não consigo fazer esse filtro. Como devo fazer?
abs