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

busqueda por "composite id"

Estas en el tema de busqueda por "composite id" en el foro de Java en Foros del Web. Buenas, otra vez por aqui dando la vara. Lo primero muchas gracias. Tengo una tabla con 3 campos que son primary key por lo tanto ...
  #1 (permalink)  
Antiguo 05/10/2010, 06:47
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
busqueda por "composite id"

Buenas, otra vez por aqui dando la vara. Lo primero muchas gracias.

Tengo una tabla con 3 campos que son primary key por lo tanto me ha generado la siguiente estructura de XML y BEAN.

Tabla --> campo1 (pk), campo2 (pk), campo3(pk), campo4, campo5
XML -->
<class name="Table1Bean" table="Tabla">
<composite-id name="IdBean" class="ClaseIdBean">
<key-property name="campo1" type="string">
<column name="CAMPO1" length="20" />
</key-property>
<key-property name="campo2" type="string">
<column name="CAMPO2" length="15" />
</key-property>
<key-property name="campo3" type="string">
<column name="CAMPO3" length="4" />
</key-property>
</composite-id>
<property name="campo4" type="string">
<column name="CAMPO4" length="50" />
</property>
......

BEANS --> TABLA1 --> el refernte al xml

public class Table1Bean implements java.io.Serializable {
/** Objeto de tipo ClaseIdBean que tiene la clave*/
private ClaseIdBeanIdBean;
/** campo1 */
private String campo1;
...

/** Constructor de clase */
public Table1Bean () {
}
getter y setters

Objeto de clave

public class ClaseIdBean implements java.io.Serializable {

/** campo1 */
private String campo1;

/** campo2 */
private String campo2;

/** campo3 */
private String campo3;

/** Constructor de clase */
public ClaseIdBean () {
}
getter y setters


Vale y tras este rollo ¿como puedo hacer una consulta pasandole como filtro la clave?

He probado 2 cosas sin resultado y no se que esta mal.

Lo "bonito" con el objeto
Rellenar el objeto pk (ClaseIdBean) con los datos que quiero hacer de filtro y meterselo al objeto que tengo parseado Table1Bean para luego

Table1Bean = (Table1Bean)session.get(Table1Bean.class, Table1Bean);

Opcion 2 HQL puro y duro

query = session.createQuery(FROM Table1Bean p WHERE p.campo1 = :c1 AND p.campo2 = :c2 AND p.campo3 = :c3);

query.setParameter("c1",Table1Bean.ClaseIdBean().g etCampo1());
......
Table1Bean = (Table1Bean) query.uniqueResult();

El resultado es unico porque vamos por todos los campos de la pk.

Muchas gracias
  #2 (permalink)  
Antiguo 05/10/2010, 08:35
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
Respuesta: busqueda por "composite id"

De opcion2 ya lo he conseguido al menos para el caso de una unica tabla, el error estaba en que ponia el nombre de la columna en vez del nombre de la propiedad (copy-paste ese gran amigo a veces enemigo otras tantas....)

¿Como se haria de la forma 1? porque quedase mas chulo jejje.

y aprovechando Si esa tabla la cruzo con otra ¿se puede hacer como sql? es decir una query de este estilo

query = session.createQuery(FROM Table1Bean p, Tabla2Bean t2 WHERE p.campo1 = t2.campo1 and p.campo1 = :c1 AND p.campo2 = :c2 AND p.campo3 = :c3);

Muchas gracias
  #3 (permalink)  
Antiguo 05/10/2010, 09:56
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: busqueda por "composite id"

Del API de Hibernate:

Cita:
public Object get(Class clazz,Serializable id) throws HibernateException
Return the persistent instance of the given entity class with the given identifier, or null if there is no such persistent instance. (If the instance, or a proxy for the instance, is already associated with the session, return that instance or proxy.)
En cristiano, lo que pasas (debes pasar) en ese método es la clase que esperas recibir y una instancia de la clase clave primaria. No es eso lo que estás pasando .

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #4 (permalink)  
Antiguo 11/10/2010, 13:43
 
Fecha de Ingreso: abril-2005
Mensajes: 171
Antigüedad: 19 años
Puntos: 0
Respuesta: busqueda por "composite id"

Muchas gracias.

Etiquetas: busquedas
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 09:22.