2009-10-09 9 views
0

Mon projet a été généré à l'origine par seam-gen et l'action "List" du bean ne fonctionne pas comme prévu. Le tableau de restriction a tous les attributs de la table et se comporte comme si tous les paramètres étaient obligatoires. Voir la liste ci-dessous:SEAM ENTITYQUERY - Problèmes avec l'exemple de restriction seam-gem

package br.com.autenticis.comvenif_red_web.session; 

import br.com.autenticis.comvenif_red_web.entity.*; 
import org.jboss.seam.annotations.Name; 
import org.jboss.seam.framework.EntityQuery; 
import java.util.Arrays; 

@Name("t233Ev01List") 
public class T233Ev01List extends EntityQuery<T233Ev01> { 

private static final String EJBQL = "select t233Ev01 from T233Ev01 t233Ev01"; 

private static final String[] RESTRICTIONS = { 
    //"lower(t233Ev01.placaUnica) like lower(concat(#{t233Ev01List.t233Ev01.placaUnica},'%'))",}; 
    "lower(t233Ev01.placaUnica) like lower(concat(#{t233Ev01List.t233Ev01.placaUnica},'%'))", 
    "lower(t233Ev01.renavam) like lower(concat(#{t233Ev01List.t233Ev01.renavam},'%'))", 
    "lower(t233Ev01.numIdentProprietario) like lower(concat(#{t233Ev01List.t233Ev01.numIdentProprietario},'%'))", 
    "lower(t233Ev01.nomeProprietario) like lower(concat(#{t233Ev01List.t233Ev01.nomeProprietario},'%'))", 
    "lower(t233Ev01.anoFabricacao) like lower(concat(#{t233Ev01List.t233Ev01.anoFabricacao},'%'))", 
    "lower(t233Ev01.anoModelo) like lower(concat(#{t233Ev01List.t233Ev01.anoModelo},'%'))", 
    "lower(t233Ev01.ufByUfEmissao) like lower(concat(#{t233Ev01List.t233Ev01.ufByUfEmissao},'%'))", 
    "lower(t233Ev01.numeroCrv) like lower(concat(#{t233Ev01List.t233Ev01.numeroCrv},'%'))", 
    "lower(t233Ev01.dataEmissao) like lower(concat(#{t233Ev01List.t233Ev01.dataEmissao},'%'))", 
    "lower(t233Ev01.numeroVia) like lower(concat(#{t233Ev01List.t233Ev01.numeroVia},'%'))", 
    "lower(t233Ev01.codigoSegurancaCrv) like lower(concat(#{t233Ev01List.t233Ev01.codigoSegurancaCrv},'%'))", 
    "lower(t233Ev01.tipoDocCartorio) like lower(concat(#{t233Ev01List.t233Ev01.tipoDocCartorio},'%'))", 
    "lower(t233Ev01.numIdentCartorio) like lower(concat(#{t233Ev01List.t233Ev01.numIdentCartorio},'%'))", 
    "lower(t233Ev01.numIdentCv) like lower(concat(#{t233Ev01List.t233Ev01.numIdentCv},'%'))",}; 

private T233Ev01 t233Ev01; 

public T233Ev01List() { 
    t233Ev01 = new T233Ev01(); 
    t233Ev01.setId(new T233Ev01Id()); 
    setEjbql(EJBQL); 

    setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS)); 
    setMaxResults(25); 
} 

public T233Ev01 getT233Ev01() { 
    return t233Ev01; 
} 
} 

Quand je vous suffit de remplir le champ « Placa Unica » sous forme, par exemple, un sql avec tous les champs sont générés comme ceci:

SELECT * 
    FROM (SELECT t233ev01x0_.idtransacao AS idtransa1_26_, 
       t233ev01x0_.dia_juliano AS dia2_26_, 
       t233ev01x0_.uf_imovel_comprador AS uf38_26_, 
       t233ev01x0_.uf_imovel_cartorio AS uf37_26_, 
       t233ev01x0_.uf_emissao AS uf36_26_, 
       t233ev01x0_.placa_unica AS placa3_26_, 
       t233ev01x0_.renavam AS renavam26_, 
       t233ev01x0_.num_ident_proprietario AS num5_26_, 
       t233ev01x0_.nome_proprietario AS nome6_26_, 
       t233ev01x0_.ano_fabricacao AS ano7_26_, 
       t233ev01x0_.ano_modelo AS ano8_26_, 
       t233ev01x0_.numero_crv AS numero9_26_, 
       t233ev01x0_.data_emissao AS data10_26_, 
       t233ev01x0_.numero_via AS numero11_26_, 
       t233ev01x0_.codigo_seguranca_crv AS codigo12_26_, 
       t233ev01x0_.tipo_doc_comprador AS tipo13_26_, 
       t233ev01x0_.num_ident_comprador AS num14_26_, 
       t233ev01x0_.nome_comprador AS nome15_26_, 
       t233ev01x0_.nome_logradouro_comprador AS nome16_26_, 
       t233ev01x0_.numero_imovel_comprador AS numero17_26_, 
       t233ev01x0_.complemento_imovel_comprador AS complem18_26_, 
       t233ev01x0_.bairro_imovel_comprador AS bairro19_26_, 
       t233ev01x0_.cod_municipio_imovel_comprador AS cod20_26_, 
       t233ev01x0_.cep_imovel_comprador AS cep21_26_, 
       t233ev01x0_.cod_municipio_local_venda AS cod22_26_, 
       t233ev01x0_.data_venda AS data23_26_, 
       t233ev01x0_.tipo_doc_cartorio AS tipo24_26_, 
       t233ev01x0_.num_ident_cartorio AS num25_26_, 
       t233ev01x0_.nome_cartorio AS nome26_26_, 
       t233ev01x0_.nome_logradouro_cartorio AS nome27_26_, 
       t233ev01x0_.numero_imovel_cartorio AS numero28_26_, 
       t233ev01x0_.complemento_imovel_cartorio AS complem29_26_, 
       t233ev01x0_.bairro_imovel_cartorio AS bairro30_26_, 
       t233ev01x0_.cod_municipio_imovel_cartorio AS cod31_26_, 
       t233ev01x0_.cep_imovel_cartorio AS cep32_26_, 
       t233ev01x0_.ddd_tel_cartorio AS ddd33_26_, 
       t233ev01x0_.num_tel_cartorio AS num34_26_, 
       t233ev01x0_.num_ident_cv AS num35_26_ 
      FROM autenticis_comvenif.t233_ev01 t233ev01x0_ 
     WHERE (LOWER (t233ev01x0_.renavam) LIKE LOWER (? || '%')) 
      AND (LOWER (t233ev01x0_.ano_fabricacao) LIKE LOWER (? || '%')) 
      AND (LOWER (t233ev01x0_.ano_modelo) LIKE LOWER (? || '%')) 
      AND (LOWER (t233ev01x0_.numero_crv) LIKE LOWER (? || '%')) 
      AND (LOWER (t233ev01x0_.data_emissao) LIKE LOWER (? || '%')) 
      AND (LOWER (t233ev01x0_.numero_via) LIKE LOWER (? || '%')) 
      AND (LOWER (t233ev01x0_.tipo_doc_cartorio) LIKE LOWER (? || '%')) 
      AND (LOWER (t233ev01x0_.num_ident_cv) LIKE LOWER (? || '%'))) 
WHERE ROWNUM <= ? 

Je ne veux pas mettre dans la requête, les champs qui ne sont pas remplis (null). Je n'ai trouvé aucun exemple de "Dynamic Restriction" ou une autre façon de le faire avec EntityQuery

Répondre

0

Cateno, cela ressemble étrangement à quelque chose qui m'est arrivé. Dans mon cas, l'entité en question était une vue, pas une table, et donc seam/hibernate n'a pas pu trouver un champ de clé primaire à utiliser comme identifiant. Pour cette vue, seam generate-entities créait 2 entités, une qui ne contenait qu'un identifiant et une qui contenait une sorte de sous-entité avec tous les autres champs. Je n'ai pas vraiment compris ce qu'il a fait ou pourquoi. La EntityList correspondante que j'ai eu ressemble étrangement à celle que vous publiez ici.

La façon dont j'ai contourné ceci était de définir explicitement le kid primaire pour cette entité dans le fichier seam-gen.reveng.xml. Ce fichier est dans le dossier des ressources. Pour un exemple ici est ce que l'entrée dans mon fichier reveng.xml ressemblait à:

<table name="office_view"> 
    <primary-key> 
     <key-column name='office_id' /> 
    </primary-key> 
</table> 

Si ceci est votre problème, définir explicitement une clé primaire ici peut vous aider.

avril 26