Olá, tenho as seguintes entidades:
package br.com.pokemax.modelo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "geracao")
public class Geracao {
    @Getter
    @Setter
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Getter
    @Setter
    @NotBlank(message = "Nome não pode estar em branco.")
    @Pattern(regexp = "[A-z]*", message = "Atenção, digite somente letras")
    @Size(max = 20, message = "Máximo de 20 caracteres permitidos.")
    @Column(length = 20, nullable = false)
    private String nome;
    @Getter
    @Setter
    @Min(1)
    @Max(7)
    private Integer numero;
    @Getter
    @Setter
    @Column(name = "total_pokemons", nullable = false)
    private Integer totalPokemons;
    public Geracao() {
    }
}
package br.com.pokemax.modelo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
@Entity
@Table(name = "habilidade", uniqueConstraints = @UniqueConstraint(columnNames = { "nome" }))
public class Habilidade {
    @Getter
    @Setter
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Getter
    @Setter
    @NotBlank(message = "Nome não pode estar em branco.")
    @Pattern(regexp = "[A-z]*", message = "Atenção, digite somente letras")
    @Size(max = 20, message = "Máximo de 20 caracteres permitidos.")
    @Column(length = 20, nullable = false)
    private String nome;
    @Getter
    @Setter
    @NotBlank
    @Size(max = 150, message = "Máximo de 150 caracteres permitidos.")
    @Column(length = 150, nullable = false)
    private String descricao;
    @Getter
    @Setter
    @NotBlank
    @Size(max = 150, message = "Máximo de 150 caracteres permitidos.")
    @Column(name = "texto_in_game", length = 150, nullable = false)
    private String textoInGame;
    @Getter
    @Setter
    @Column(length = 150, name = "efeito_secundario", nullable = true)
    private String efeitoSecundario;
    
    @Getter
    @Setter
    @ManyToOne
    private Geracao geracao;
    public Habilidade() {
    }
}
package br.com.pokemax.controle;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import br.com.pokemax.modelo.Geracao;
import br.com.pokemax.modelo.Habilidade;
import br.com.pokemax.negocio.GeracaoDAO;
import br.com.pokemax.negocio.HabilidadeDAO;
import br.com.pokemax.util.MensagensUtil;
import br.com.pokemax.util.ValidadorUtil;
import lombok.Getter;
import lombok.Setter;
@ViewScoped
@ManagedBean(name = "habilidademb")
public class ControleHabilidade implements Serializable {
    private static final long serialVersionUID = 1L;
    @Getter
    @Setter
    private Habilidade habilidade;
    @Inject
    private HabilidadeDAO dao;
    @Getter
    @Setter
    private Boolean efeitoSecundario;
    @Getter
    @Setter
    private List<Habilidade> lista;
    @Inject
    GeracaoDAO gDao;
    @Getter
    @Setter
    private Geracao geracao;
    @Getter
    @Setter
    private List<Geracao> geracoes;
    @PostConstruct
    public void inicio() {
    }
    public void novo() {
        habilidade = new Habilidade();
    }
    public void gravar() {
        try {
            if (habilidade.getId() == null) {
                dao.insert(habilidade);
                MensagensUtil.msg("Info", "cadastro.sucesso", new Object[] { MensagensUtil.get("habilidade") });
                habilidade = new Habilidade();
            } else {
                dao.update(habilidade);
                MensagensUtil.msg("Info", "alterado.sucesso", new Object[] { MensagensUtil.get("habilidade") });
            }
        } catch (Exception e) {
            e.getMessage();
            return;
        }
    }
    public void pesquisar() {
        try {
            lista = dao.findAll();
            for (Habilidade habilidade : lista) {
                habilidade.setDescricao(ValidadorUtil.checkTipoPokemon(habilidade.getDescricao()));
                habilidade.setTextoInGame(ValidadorUtil.checkTipoPokemon(habilidade.getTextoInGame()));
                habilidade.setDescricao(ValidadorUtil.checkAtributoPokemon(habilidade.getDescricao()));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public void excluir(Habilidade h) {
        try {
            dao.delete(h);
            MensagensUtil.msg("Info", "removido.sucesso", new Object[] { MensagensUtil.get("habilidade") });
            pesquisar();
        } catch (Exception e) {
            e.getMessage();
        }
    }
    public void editar(Long id) {
        try {
            setHabilidade(dao.find(id));
        } catch (Exception e) {
            e.getMessage();
        }
    }
    public void cancelar() {
        habilidade = null;
    }
    public List<Geracao> listarGeracoes() throws Exception {
        this.geracoes = gDao.findAll();
        return this.geracoes;
    }
}
package br.com.pokemax.modelo.converter;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.inject.Inject;
import br.com.pokemax.modelo.Geracao;
import br.com.pokemax.negocio.GeracaoDAO;
@FacesConverter(value = "geracaoConverter", forClass = Geracao.class)
public class GeracaoConverter implements Converter {
    @Inject
    GeracaoDAO dao;
    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
        if (value != null) {
            try {
                Geracao geracao = dao.find(Long.parseLong(value));
                return geracao;
            } catch (Exception e) {
                e.printStackTrace();
                return e;
            }
            
        }
        return null;
    }
    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object object) {
        if (object != null) {
            return String.valueOf(((Geracao) object).getId());
        } else {
            return null;
        }
    }
}
Estou tentando implementar um autocomplete do primefaces, quando eu chego no converter ele não passa da linha
Geracao geracao = dao.find(Long.parseLong(value));
porque o dao está null mesmo eu dando o Inject nele, alguém sabe como posso resolver?