Em um ejb ou classe mesmo de um DAO, existe um metodo por exemplo findByPrimaryKey, obviamente este método deve retornar um objeto do select em questão.
Mas se precisarmos de uma consulta específica, por exemplo, nome de um usuario (tabela usuario) e quantas vezes ele logou no sistema ( tabela acessos). A collection de retorno deverá conter que tipo de objeto? Crio um com getUsername e getCount?
Vcs sabem se algum pattern resolve meu problema?
Hoje eu faço dessa forma mesmo, crio uma classe com esses 2 atributos, apenas tenho a dúvida se é assim que a maioria faz.
O find é feito na fábrica de um entity, e ele deve retornar o mesmo tipo da interface local desse entity.
Por exemplo, vc quer listar um conjunto de usuário com primeiro nome igual a determinada coisa vc cria um find na interface home do entity usuario:
public UsuarioLocal UsfindByPrimeiroNome(String primeiroNome) throws FinderException;
observe que esse método deve retornar uma a interface local do entity usuario.
Aí vc escreve o ejb-ql pra ele:
find object(o) from usuario o where o.primeiroNome = ?1
[]'s
R
ricardogilPJ
carisio, tudo bem sobre o que escreveu, e para um retorno que tem haver com uma entity usuario por exemplo, mas que possua atributos não definidos na interface local. Como vc “mapeia” o retorno?
C
carisioPJ
Se for o q estou imaginando com a primeira pergunta, faria num bean de sessão.
Q tipos de atributos vc tá falando?
R
ricardogilPJ
falo sobre atributos que não existem (por exemplo count de quantas vezes um usuario logou por exemplo) ou atributos vindos de outras entitys.
C
carisioPJ
Eu usaria um bean de sessão que faria o acesso aos entitys.
R
ricardogilPJ
seria muito pedir um pequeno exemplo?
aproveitando o caso usuario x acessos do mesmo.
Valeu
C
carisioPJ
ricardogil,
faria mais ou menos assim, criaria um session bean para colocar minha lógica de negócios. Esse session bean acessaria o banco, através dos entitys beans, faria alguma coisa com eles e retornaria pra mim o resultado. Por exemplo, se vc quer saber qtas vezes usuário X logou no sistema, vc teria um método no session:
public int getQuantasVezesUsuarioLogouNoSistema(Object chavePrimariaDoUsuario)
{
/* Supondo que vc tem uma tabela de Log's, q mostra informações sobre os log's no sistema, e q o método getLogLocalHome() retorna um LogLocalHome (interface Home do entity Log), temos: */
Collection logsDoUsuario = getLogLocalHome().findByUsuarioPrimaryKey(chavePrimariaDoUsuario);
return logsDoUsuario.size();
}
Nesse exemplo a gente tem 1 entity, Log, q representa a tabela de log’s do seu sistema e um session, q faz a sua lógica de negócios.