Jpa2 - CriteriaBuilder join com entity @Embeddable [RESOLVIDO]

Alguém poderia me ajudar a acertar uma consulta através do CriteriaBuilder do JPA2 ??

Eu não estou conseguindo adicionar uma condição no select quando tenho uma classe @Embeddable

@Entity
class Person{
        @Embedded 
        private Address address;
        //...
}

@Embeddable  
class Address {
        private String city;
        //...
}

Quando tento, buscar todas as Pessoas que tenham a cidade ocorre NulPointerException, já tentei fazer um join, q ñ deveria ser, mais mesmo assim dá erro.

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();  
		CriteriaQuery<Person> criteriaQuery = criteriaBuilder.createQuery(Person.class);  
		
		Root<Person> from = criteriaQuery.from(Person.class);  
		
		CriteriaQuery<Person> select = criteriaQuery.select(from);
		Predicate p1 =		criteriaBuilder.equal(from.get("address.city"), "Sao Paulo"); //ocorre java.lang.NullPointerException

		TypedQuery<Person> typedQuery = entityManager.createQuery(select.where(p1));
		List<Person> resultList = typedQuery.getResultList();

Upp…

A propriedade Address em Person não deveria ser marcada como embeddableId?

Eu ñ usei esta anotação, pois ñ preciso referenciar por id a minha classe Embeddable pois sempre vou buscar por outro campo da entidade, no hibernate puro eu consigo buscar sem problemas mas nesta nova versão do Jpa2 ocorre erro. As tabelas foram criadas corretamente, mais não consigo usar no select.

Bom vou tentar usar esta anotacao @EmbeddedId e ver o que acontece.

Se alguém tiver + idéias, serão bem vidas !

Eu não quero usar o EmbeddableId pois não é uma pk composta que preciso…
Eu só quero separar alguns campos em um outro objeto(Address), mas estes campos tem que ficar na mesma tabela ‘person’.
executando a seguinte jhql ele retorna o resultado correto:

Mas quando executado com Criteria do Jpa2 continuo não conseguindo, alguém tem uma luz ?

Bom resolvido!

Eu estava tentando setar o parametro direto de uma vez só, mas no jpa2 tem que ser campo por vez.
O certo seria assim, por isto que não estava conseguindo:

                                CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();  
		CriteriaQuery<Person> criteriaQuery = criteriaBuilder.createQuery(Person.class);  
		
		Root<Person> from = criteriaQuery.from(Person.class);  
		
		CriteriaQuery<Person> select = criteriaQuery.select(from);

		Predicate p1 =		criteriaBuilder.equal(from.get("address").get("city"), "São Paulo");//CORRIGIDO AQUI.

		TypedQuery<Person> typedQuery = entityManager.createQuery(select.where(p1));
		List<Person> resultList = typedQuery.getResultList();