Tenho isso:
@Entity
@Table(name="SISTEMA")
public class Sistema implements Serializable{
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="ID_SIS")
    private Integer id;
    @Column(unique=true, name="SIGLA_SIS", length=8)
    private String sigla;
    @Column(name="DESCRICAO_SIS", length=80)
    private String descricao;
    @OneToMany(mappedBy="sistema")
    private List<Funcao> funcoes = new ArrayList<Funcao>();
    @OneToMany(mappedBy="sistema")
    private List<Contrato> contratos = new ArrayList<Contrato>();
    public Sistema() {
    }
    public Sistema(Integer idSistema, String siglaSistema, String descricaoSistema) {
        this.id = idSistema;
        this.sigla = siglaSistema;
        this.descricao = descricaoSistema;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getSigla() {
        return sigla;
    }
    public void setSigla(String sigla) {
        this.sigla = sigla;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public List<Funcao> getFuncoes() {
        return funcoes;
    }
    public void setFuncoes(List<Funcao> funcoes) {
        this.funcoes = funcoes;
    }
    public List<Contrato> getContratos() {
        return contratos;
    }
    public void setContratos(List<Contrato> contratos) {
        this.contratos = contratos;
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((descricao == null) ? 0 : descricao.hashCode());
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime * result + ((sigla == null) ? 0 : sigla.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Sistema other = (Sistema) obj;
        if (descricao == null) {
            if (other.descricao != null)
                return false;
        } else if (!descricao.equals(other.descricao))
            return false;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (sigla == null) {
            if (other.sigla != null)
                return false;
        } else if (!sigla.equals(other.sigla))
            return false;
        return true;
    }
    @Override
    public String toString() {
        return "Sistema [id=" + id + ", sigla=" + sigla + ", descricao=" + descricao + "]";
    }
}Fiz essa query:
"select s from Sistema s join fetch s.funcoes, join fetch s.contratos"E então dá erro ao executar
 
             
            