Dúvida se é possível fazer em HQL (ou SQL)

Preciso buscar o email de clientes para facilitar para enviar email:

this.session.createQuery("SELECT nome, email FROM Cliente WHERE nome LIKE ?") .setString(0, "%"+nome+"%") .list()

Porém, também tenho os emails de outros contatos, …
Para facilitar coloco um campo extra tipo para definir de onde está vindo esse email.Ex:

“Rafael”, "email@email.com.br", “Cliente”
“Teste”, "email@email.com.br", “Outro Contato”

No entanto, esse campo não existe no banco de dados(não posso colocar no select da query). O que eu faço, para cada uma das listas pesquisadas antes de inclui-la em uma lista maior (com todos os emails), é colocar essa propriedade manualmente:

E fazia essa “filtragem” no front-end:

for each ( var arr:Array in l l ){ arr['tipo'] = "Cliente"; }

Porém, eu queria fazer tudo na mesma query para melhorar a perfomance, tenho como fazer algo semelhante a isso:

this.session.createQuery("SELECT nome, email, tipo = 'Cliente' FROM Cliente WHERE nome LIKE ?") .setString(0, "%"+nome+"%") .list()

Fazer uma busca ‘predefinindo’ o preenchimento de um campo :S

Putz cara…tentei entender o que vc escreveu aí em cima…mas não consegui.

Aparentemente vc precisa incluir uma coluna no resultado da sua query. Acho que o mais fácil seria fazer o preenchimento em código Java, ou então criar mais uma tabela de relacionamento com os valores q vc precisa.

Agora se vc realmente quer assim, segue query:

SELECT
nome as NOME,
email as EMAIL,
‘Cliente’ as TIPO
FROM Cliente
WHERE nome LIKE ?

[quote=Giulliano]Agora se vc realmente quer assim, segue query:

SELECT
nome as NOME,
email as EMAIL,
‘Cliente’ as TIPO
FROM Cliente
WHERE nome LIKE ?[/quote]

Valeu era isso mesmo que precisava, desculpa se não me expressei bem na mensagem acima.
Pensei assim, pois achei que ficaria mais rápido trazendo direto na query, não? (vou fazer os testes aqui…)

O “mais rápido” nesse caso é relativamente desnecessário. A velocidade de processamento se fosse feita no Java, seria milésimos de segundos mai demorado. A menos que esses milésimos faça algma diferença…

[ ]'s

Ainda se você for buscar em mais de uma tabela pode fazer usar union

SELECT
nome as NOME,
email as EMAIL,
'Cliente' as TIPO
FROM Cliente
WHERE nome LIKE ?
union all
SELECT
nome as NOME,
email as EMAIL,
'Fornecedor' as TIPO
FROM Fornecedor
WHERE nome LIKE ?

e vai retornar tudo em uma consulta só…

[quote=douglasrauber]
Ainda se você for buscar em mais de uma tabela pode fazer usar union

SELECT
nome as NOME,
email as EMAIL,
'Cliente' as TIPO
FROM Cliente
WHERE nome LIKE ?
union all
SELECT
nome as NOME,
email as EMAIL,
'Fornecedor' as TIPO
FROM Fornecedor
WHERE nome LIKE ?

e vai retornar tudo em uma consulta só…[/quote]

nesse caso vale a pensa pensar um pouco em performance…rss

[quote=Giulliano][quote=douglasrauber]
Ainda se você for buscar em mais de uma tabela pode fazer usar union

SELECT
nome as NOME,
email as EMAIL,
'Cliente' as TIPO
FROM Cliente
WHERE nome LIKE ?
union all
SELECT
nome as NOME,
email as EMAIL,
'Fornecedor' as TIPO
FROM Fornecedor
WHERE nome LIKE ?

e vai retornar tudo em uma consulta só…[/quote]

nesse caso vale a pensa pensar um pouco em performance…rss[/quote]

Não vejo nenhuma hipótese em que dessa forma fosse mais lento que fazendo duas consultas e populando objetos duas vezes! Pode dizer onde seria a perda ?

Vlw