I was able to resolve this by myself
A provider class HibernateMetadataUtilProvider is create to provide HibernateMetadataUtil
package core.models.dao;
import javax.persistence.EntityManagerFactory;
import org.hibernate.ejb.HibernateEntityManagerFactory;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.googlecode.genericdao.search.MetadataUtil;
import com.googlecode.genericdao.search.jpa.hibernate.HibernateMetadataUtil;
@SuppressWarnings("deprecation")
public class HibernateMetadataUtilProvider
implements Provider<MetadataUtil> {
@Inject
private EntityManagerFactory emf;
@Override
public MetadataUtil get() {
return HibernateMetadataUtil.getInstanceForEntityManagerFactory((HibernateEntityManagerFactory) emf);
}
}
Another class JPASearchProcessorProvider is created which will inject JPASearchProcessor
package core.models.dao;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.googlecode.genericdao.search.MetadataUtil;
import com.googlecode.genericdao.search.jpa.JPASearchProcessor;
public class JPASearchProcessorProvider implements Provider<JPASearchProcessor> {
@Inject
private MetadataUtil mdu;
@Override
public JPASearchProcessor get() {
return new JPASearchProcessor(mdu);
}
}
Then in our inject class we can simply bind these providers
public class AppInjector extends AbstractModule {
@Override
protected void configure() {
/*
* JPA Bindings
*/
bind(JPASearchProcessor.class).toProvider(JPASearchProcessorProvider.class);
bind(MetadataUtil.class).toProvider(HibernateMetadataUtilProvider.class);
}