Ajuda com Hibernate

Senhores, preciso descobrir com deixar um "clausula" fixa em minha classe HibernateUtil.
No meu caso, o banco é "multi-empresa", ou seja, os registros são "sempre selecionados" através do "id_empresa", sendo assim fiz dessa forma:



@Entity
@Table(schema ="colocation", name = "lista_acesso")
public class ListaAcesso implements Serializable{

	private static final long serialVersionUID = 2249515080313449498L;

	@Id
	@Column(name = "id_lista_acesso")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long idListaAcesso;

	@OneToOne(cascade = { CascadeType.ALL })
	@JoinColumn(name = "id_empresa")
	private Empresa empresa;

	@Column(name = "nome")
	private String nome;

	@Column(name = "cargo")
	private String cargo;
       
       .....
}


@Entity
@Table(name = "pj")
public class Empresa implements Serializable {

	private static final long serialVersionUID = -612043523887259306L;

	@Id
	@Column(name = "id_pj")
	private Integer idEmpresa;

	@Column(name = "razaosocial")
	private String razaoSocial;

	@Column(name = "nomefantasia")
	private String nomeFantasia;
       
       .....
}

Bom, no meu HibernateUtil

	public static List<?> findByCriteria(Class<?> klass, String orderBy, Criterion... criterion)throws DAOException {

		Session session = null;
		Transaction transaction = null;

		try{

			session = getSessionFactory().openSession();
			transaction = session.beginTransaction();
			Criteria crit = session.createCriteria(klass);

			for (Criterion c : criterion) {
				crit.add(c);
			}
			
			crit.add(Restrictions.eq("empresa", FacesUtil.getEmpresa().getIdEmpresa())); //NESSE CASO PRECISO DEIXAR FIXO(Todas classes entity tem o atributo empresa)
			crit.addOrder(Order.asc(orderBy));

			List<?> retorno = crit.list();
			transaction.commit();

			return retorno;
		}catch(HibernateException hbe){
			if(transaction != null){
				transaction.rollback();
			}
			throw new DAOException(hbe);
		}finally{
			if(session != null){
				session.close();
			}
		}
	}

Mas, quando chamo esse método o seguinte erro é apresentado, e o pior que o SQL gerado executa sem falhas!

br.com.rbs.exception.DAOException: org.hibernate.PropertyAccessException: could not get a field value by reflection getter of br.com.unitelco.entity.Empresa.idEmpresa
	at br.com.rbs.helper.HibernateUtil.findByCriteria(HibernateUtil.java:103)
	at br.com.rbs.dao.hibernate.GenericHibernateDAO.findByCriteria(GenericHibernateDAO.java:37)

Desde já agradeço.

O erro parece estar nessa forma que você busca o objeto empresa através desse método FacesUtil, mas no seu caso talvez seja melhor fazer uma superclasse contendo apenas o objeto empresa, e todas as demais classes extendem essa classe, daí basta fazer o filtro da empresa pela superclasse ou por uma interface dela, o que funcionaria tranquilo, já que todas as classes são derivadas dela, mais ou menos assim:

@MappedSuperclass public abstract class Dados<T extends Dados<T, ID>, ID extends Serializable> implements Serializable { @OneToOne(cascade = { CascadeType.ALL }) @JoinColumn(name = "id_empresa") private Empresa empresa; }

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
@Table(schema ="colocation", name = "lista_acesso")
public class ListaAcesso extends Dados<ListaAcesso,Long> implements Serializable
{
...
}

Por fim basta fazer um Dao genérico utilizando o tipo Dado ou uma interface.