Criteria Hibernate Restrictions.disjunction()

Pessoal ja pesquisei ,e achei várias abordagens mas nenhuma fez o q eu queria

tenho um mapeamento em cadeia

Frota->StatusFrota->Apontamento->Fazenda

Sendo que cada frota tem somente 1 STATUS , cada status pode referenciar a VARIOS apontamentos , cada apontamento so tem UM status frota , e cada apontamento so tem UMA fazenda.

no qual ao fazer a requisição no banco gostaria que viessem todas as frotas que tem fazenda nulla e as que nao tiverem eu gostaria que viesse so as fazendas do ano que estiver.

minha ultima tentativa foi

crit.createCriteria("statusFrota").createCriteria("apontamento").createCriteria("fazenda").add(Restrictions.disjunction() .add(Restrictions.like("anoSafra",Utils.getAnoAtual())) .add(Restrictions.isNull("anoSafra")));

mas eu so estou trazendo as frotas q tem fazenda e com ano de 2009. Que nao está errado totalemnte mas eu gostaria tb de trazer as frotas q nao tem fazenda.

Aguem sabe como me ajudar ?!

Para ajudar ai vai o mapeamento das minhas classes

Equipamento

@Entity
@Table(name = "GAV_EQUIPAMENTO")
@SecondaryTable(name="FROTA", pkJoinColumns={
@PrimaryKeyJoinColumn (name="NRO_FROTA", referencedColumnName="COD_EQUIPAMENTO")})
public class Gav_Equipamento implements Serializable{
	private static final long serialVersionUID = -7566914642689144549L;

	public final static String NUMERO_EQUIP = "nroFrota";

	@Id
	@Column(name="COD_EQUIPAMENTO", nullable=false, length=10 , updatable=false ,insertable=false)
	private String nroFrota;
	
	@Column(name="dsc_modelo", nullable=false, length=50 , updatable=false ,insertable=false)
	private String descricao;
	
	@Column(table="FROTA",name="ID_LIDER_TURNO_1", nullable=true)
	private Integer idLiderTurno1;
	
	@Column(table="FROTA",name="ID_LIDER_TURNO_2", nullable=true)
	private Integer idLiderTurno2;
	
	@Column(table="FROTA",name="ID_LIDER_TURNO_3", nullable=true)
	private Integer idLiderTurno3;
	
	@Column(table="FROTA",name="CONTROLE", nullable=true)
	private String controle;
	
	@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE}  )
	@JoinColumn(table="FROTA",name="ID_FOTO_FROTA") 
	private FotoFrota foto;
	
	@Column(name="cod_empr", nullable=true , updatable=false ,insertable=false)
	private int cod_empr;
	
	@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn(name="cod_modelo",updatable=false ,insertable=false) 
	private Gav_Modelo modeloFrota;
	
	@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn(table="FROTA",name="ID_FRENTE") 
	private Gav_Frente frenteFrota;
	
	@OneToOne
	@JoinColumn(name="id_fabric" , updatable=false ,insertable=false) 
	private Gav_Fabricante frotaFabricante;
	
	@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
	@Fetch(FetchMode.SUBSELECT)
	@JoinTable(name="turno_equipamento",joinColumns=@JoinColumn(name="id_frota"),inverseJoinColumns=@JoinColumn(table="FROTA",name="id_turno"))
	private Set<Gav_Turno> turnos = new HashSet<Gav_Turno>();
	
	@ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn(table="FROTA",name="TIPO_BOLETIM") 
	private TipoBoletim tipoBoletim;

	@OneToOne(mappedBy = "equipamento")
	private StatusFrota statusFrota;
	
	@OneToOne
	@JoinColumn(name="id_classe", insertable=false, updatable=false)
	private Gav_Classe classe;
	
	@OneToOne
	@JoinColumns(value = { @JoinColumn(name="id_sub_classe",insertable=false, updatable=false),
						@JoinColumn(name="id_classe",insertable=false, updatable=false) })
	private Gav_SubClasse subClasse;
	
	@Transient
	private String apelidoEquipamento;
// sem gets e sets

StatusFrota


@Entity
@Table (name="status_frota")
public class StatusFrota implements Serializable {
	
	private static final long serialVersionUID = 7738461283498066420L;
	
	@Id
	@Column (name="id_frota")
	private String id;
	
	@OneToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@PrimaryKeyJoinColumn
	private Gav_Equipamento equipamento;
	
	@ManyToOne (fetch=FetchType.EAGER, cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="id_status", nullable=false)
	private Status status;
	
	@Column (name="dt_atualizacao", nullable=true)
	private Date dataAtualizacao;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="id_celular", nullable=true)
	private Celular celular;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="id_apontamento", nullable=true)
	private Apontamento apontamento;
	
	@Column (name="versao_mobile", length=10)
	private String versaoMobile;

//Sem gets e sets

Apontamento


@Entity
@Table (name="apontamento")
@SequenceGenerator(name = "seq_apontamento", sequenceName = "seq_bob_apontamento") 
public class Apontamento implements Serializable {
	private static final long serialVersionUID = 2562670148114406386L;
	
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_apontamento")
	private int id;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="id_boletim", nullable=false)
	private Boletim boletim;
	
	@ManyToOne
	@JoinColumn(name = "fazenda", nullable = true)
	private Gav_Fazenda fazenda;
	
	@Column (name="area", nullable=true)
	@Deprecated
	private Long area;
	
	@Column (name="talhao", nullable=true)
	@Deprecated
	private Long talhao;
	
	@Column (name="os")
	private Long numeroOs;
	
	@Column(name = "FLAG_LOTE ", nullable = false)
	private byte flagLote;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="op_principal", nullable=true)
	private Gav_Operacao operacaoPrincipal;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="op_realizada", nullable=true)
	private Gav_Operacao operacaoRealizada;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="parada", nullable=true)
	private Gav_Motivos_Parada parada;
	
	@Column (name="centro_custo", nullable=true, scale=10, precision=0)
	@Deprecated
	private Long centroCusto;
	
	@Column (name="med_inicial", nullable=true, scale=8, precision=2)
	private Double medicaoInicial;
	
	@Column (name="med_final", nullable=true, scale=8, precision=2)
	@Deprecated
	private Double medicaoFinal;
	
	@Column (name="dt_inicial", nullable=false)
	private Date dataInicial;
	
	@Column (name="dt_final", nullable=true)
	@Deprecated
	private Date dataFinal;
	
	@Column (name="dt_inclusao", nullable=false)
	private Date dataInclusao;
	
	@Column (name="onlineflag", nullable=true)
	private byte onlineFlag;
	
	@Column (name="dt_edicao_manual", nullable=true)
	private Date dataEdicaoManual;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="usuario_edicao_manual")
	private Usuario usuarioEdicaoManual;
	
	@Column (name="versao_mobile", length=10)
	private String versaoMobile;
	
	@Column (name="transbordo", nullable=true, scale=10, precision=0)
	@Deprecated
	private Long transbordo;
	
	@Column (name="idseqapontamento")
	private Long idSeqApontamento;
	
	@Column (name="gleba")
	private String gleba;
	
	@ManyToOne (cascade= {CascadeType.PERSIST, CascadeType.MERGE} )
	@JoinColumn (name="id_grupo_os")
	private GrupoOs grupoOs;
	
	@Column (name="implemento")
	private Long implemento;
	
	@Column (name="fazenda_origem", nullable=true)
	@Deprecated
	private Long fazendaOrigem;
	
	@Column (name="fazenda_destino", nullable=true)
	@Deprecated
	private Long fazendaDestino;
	
	@OneToMany(mappedBy="apontamento", fetch=FetchType.EAGER)
	@JoinColumn(name="ID_APONTAMENTO")
	@Fetch (FetchMode.SUBSELECT )
	private Set<ApontamentoEquipamento> listaEquipamento; 
//Sem gets e Sets

Fazenda

@Entity
@Table(name="GAV_DIVI2")
public class Gav_Fazenda implements Serializable {

	private static final long serialVersionUID = -808616346120074453L;

	@Id
	@Column(name="cod_divi2", updatable=false ,insertable=false)
	private int codDiv;
	
	@Column(name="dsc_divi2", updatable=false ,insertable=false)
	private String descricao;

	@Column(name="cod_empr", updatable=false ,insertable=false)
	private Integer empresa;
	
	@Column(name="saf_ano_safra", updatable=false ,insertable=false)
	private Integer anoSafra;
//sem gets e sets

espero q alguem possa ajudar.

Obrigado