JPA..duvida no uso de createQuery.....com dois objetos é possivel?

Olá,

como poderia fazer isso com criteria HIbernate ou createQuery(JPA) pois estou usando JPA …

tenho uma tela onde vou ter a seguinte condição
list box onde terá um :

id que refere-se ao objeto usuário 

ou 

estado que refere-se a objeto endereço 
campo condição valor   
id > 150   
ou   
estado = "SP"   
  

minha duvida como montar a query


se vier o codigo id preenchido faria assim   
SELECT distinct(user) FROM usuario user where user.id=6   

mas se vier o estado preenchido teria que usar assim :   
SELECT distinct(user) FROM usuario user JOIN user.endereco end where end.estado ="SP"   

se vier o codigo id preenchido faria assim 
SELECT distinct(user) FROM usuario user where user.id=6 

mas se vier o estado preenchido teria que usar assim : 
SELECT distinct(user) FROM usuario user JOIN user.endereco end where end.estado ="SP" 
 

e mais uma duvida na hora de passar essa variavel "estado" no jsp ela está como "est"
teria algum lugar que faria esse de para de "est" para estado como está no objeto ???

Ou existe uma forma que JPA faça isso direto ??? ou vou sempre que ter um if pra saber qual campo
foi preenchido pra tomar a decisão de montar a query ???

se alguém puder me ajudar agradeceria ???

abs