SEAM ENTITYQUERY - Проблемы с ограничением на примере шва - PullRequest
0 голосов
/ 09 октября 2009

Мой проект изначально был сгенерирован seam-gen, и компонент "Список" не работает, как я ожидал. Массив ограничений имеет все атрибуты из таблицы и ведет себя так, как если бы все параметры были обязательными. Смотрите список сильфон:

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;
 }
}

Когда я просто заполняю поле "Placa Unica" в форме, например, sql со всеми полями генерируется так:

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 <= ?

Я не хочу вставлять в запрос поля, которые не заполнены (пусто). Я не нашел ни одного примера с «Динамическим ограничением» или другим способом сделать это с EntityQuery

1 Ответ

0 голосов
/ 13 октября 2009

Катено, это выглядит подозрительно, как то, что случилось со мной. В моем случае рассматриваемая сущность была представлением, а не таблицей, и поэтому seam / hibernate не смог найти поле первичного ключа для использования в качестве его Id.

Для этого представления seam generate-entity создали 2 сущности, одна из которых содержала только идентификатор, а другая содержала какой-либо подобъект со всеми другими полями. Я действительно не понимал, что он сделал и почему. Соответствующий EntityList, который я получил, выглядел подозрительно похожим на тот, который вы публикуете здесь.

Способ, которым я обошел это, состоял в том, чтобы явно определить основного потомка для этого объекта в файле seam-gen.reveng.xml. Этот файл находится в папке ресурсов. Например, вот как выглядела запись в моем файле мести.xml:

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

Если это ваша проблема, вам может помочь явное определение первичного ключа.

april26

...