Foros del Web » Programación para mayores de 30 ;) » Java »

Duda Criteria.

Estas en el tema de Duda Criteria. en el foro de Java en Foros del Web. Hoa a todos. Tengo una duda con respecto a Criteria y ojalá me puedan ayudar a resolverla. Tengo un query en donde concateno unos campos ...
  #1 (permalink)  
Antiguo 26/05/2009, 16:16
Avatar de Wayern  
Fecha de Ingreso: septiembre-2008
Ubicación: Aguascalientes
Mensajes: 65
Antigüedad: 15 años, 7 meses
Puntos: 4
Pregunta Duda Criteria.

Hoa a todos. Tengo una duda con respecto a Criteria y ojalá me puedan ayudar a resolverla. Tengo un query en donde concateno unos campos para ver si son iguales a un String que me llega como parámetro al query.
Código:
Select * from  t_invoice_prefix_his p 
where p.nickname||p.invoice_type||'-'||p.lst_invoice_nbr=:invoice
Donde invoice es un parámetro tipo String.

Mi duda es si es posible hacer lo mismo usando Criteria, estuve tratando con algo así, pero no me funcionó:
Código:
Criteria c=getSession().createCriteria(TInvoicePrefixHis.class);
c.add(Restrictions.eq("nickname||invoice_tepe||'-'||lst_invoice_nbr", "invoice");
c.list()
Espero me puedan ayudar a sacar esta duda. Gracias de antemano.
Salu2.
  #2 (permalink)  
Antiguo 28/05/2009, 09:05
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Duda Criteria.

Wenas

Veras la query que estas ejecutando si modificas tu fichero cfg.xml y le colocas la propiedad show_sql a true

Código:
<property name="show_sql">true</property>
Que query te sale??

Saludos.

PD. No tendria que ser??

Código:
c.add(Restrictions.eq("nickname||invoice_tepe||'-'||lst_invoice_nbr", invoice);
  #3 (permalink)  
Antiguo 29/05/2009, 08:20
Avatar de Wayern  
Fecha de Ingreso: septiembre-2008
Ubicación: Aguascalientes
Mensajes: 65
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Duda Criteria.

¿Qué tal elAntonie? Muchas gracias por tu sugerencia. Trate de la forma como comentas pero la verdad es que no funcionó, así que recurri a otro método de Hibernate. Lo que terminé haciendo fue esto:
Código:
DetachedCriteria dCriteria=
			DetachedCriteria.forClass(TInvoicePrefixHis.class)
			.setProjection(Property.forName("invoicePrefixSeqId"))
			.add(Restrictions.sqlRestriction("nickname||invoice_Type||'-'||lst_Invoice_Nbr=?", invoiceNumber, Hibernate.STRING));
		
		Criteria c=getSession().createCriteria(TJeLineHis.class);
		c.add(Restrictions.not(Restrictions.in("jeType",jeTypes)));
		c.add(Restrictions.eq("outboundId", outbound));
		c.add(Property.forName("invoicePrefixSeqId").in(dCriteria));
		c.addOrder(Order.asc("jeLineSeqId"));
		jeLines=c.list();
Lo que queria hacer en un principio, era tomar la primera lista que me devolviera el query "Select * from t_invoice_prefix_his p where p.nickname || p.invoice_type || '- '|| p.lst_invoice_nbr =: invoice" y meterla en un in para hacer un otro query con esos valores. Utilizando el sqlRestriction pude utilizar el DetachedCriteria y meterlo dentro de mi query principal, además de que solucioné el problema que tenía para concatenar los campos contra los que buscaba comparar el parámetro de entrada.
Nada más quiero hacer notar que dentro del sqlRestriction se deben escribir los nombres de los campos como están en la BD y no como están en los beans.
Muchísimas gracias por tu ayuda y espero que a alguien más le sea de utilidad. Si alguien tiene otra idea y la quiere compartir es bienvenida. Salu2.
  #4 (permalink)  
Antiguo 29/05/2009, 12:24
 
Fecha de Ingreso: abril-2009
Mensajes: 82
Antigüedad: 15 años
Puntos: 2
Respuesta: Duda Criteria.

Buenas:

Por si te sigue interesando....

c.add(Restrictions.eq("nickname" + " invoice_tepe" + "-" + "lst_invoice_nbr", invoice);

El problema es que si lo haces como te comenta el compañero te sale entre nickname y invoice_tepe los caracteres "||" porque no lo trata como sentencia hql. O eso creo... por probar...

Saludos.
  #5 (permalink)  
Antiguo 30/05/2009, 07:12
Avatar de Wayern  
Fecha de Ingreso: septiembre-2008
Ubicación: Aguascalientes
Mensajes: 65
Antigüedad: 15 años, 7 meses
Puntos: 4
Respuesta: Duda Criteria.

¿Qué tal Squar? Es una buena idea... No lo probé, pero en un rato más lo pruebo y te platico que tal me fue... Saludos.
  #6 (permalink)  
Antiguo 01/06/2009, 02:08
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: Duda Criteria.

No, lo que yo queria decir es:

c.add(Restrictions.eq("nickname||invoice_tepe||-||lst_invoice_nbr", invoice);

De todos modos. Que query te sale por pantalla??

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:09.