Re:Re:Duda en la clase PO al instanciar un nuevo objeto

Inicio Foros Foro principal Desarrolladores Duda en la clase PO al instanciar un nuevo objeto Re:Re:Duda en la clase PO al instanciar un nuevo objeto

#34178
Javier AderJavier Ader
Participante

mschimpf, despues de ejecutar el save sobre un objeto po creado con Id 0, el nuevo id se obtiene como en cualquier otro objeto: o.getXXXX_ID() (despues del save, este metodo no te retorna 0, si no el nuevo id generado automaticamente).
Ahora, a nivel de base de datos los valores de las claves primarias sí se pueden modificar en ciertos casos (por lo general si las claves primarias no son autonumericas; como es el la mayoría por no decir todas, las tablas de libertya).
El siguiente update anda (asumiendo que hay un juguete con Id 100001; despues del update queda con Id 10)

Code:
update libertya.m_juguetes set m_juguetes_id = 10 where m_juguetes_id =1000001

Lo que yo te propongo es (pero que no lo veo correcto en el sentido de diseño) es

Code:
MProductQuery mpq = new MProductQuery(this.getCtx(), this.getM_Product_ID(), this.get_TrxName());

…. seteas lo que sea neceario….
//lo salvas
mpg.save();
// y ahora podes hacer dos cosas
//1)
mpq.setM_Product_Query_ID(this.getM_Product_ID());
mpg.save();

//o 2)
DB.executeUpdate(“Update m_ProductQuery set m_productQuery_id = “+
this.getM_Product_ID() +
” where m_productQuery_id ” = mpg.getM_Product_Query_ID() );
//este ejecuta el update de la clave primaria “a mano”
//y ahora “lo relees”
mpg = new MProductQuery(this.getCtx(), this.getM_Product_ID(), this.get_TrxName());

En cualquier caso, esto es bastante mala práctica (internamente el servidor setea indices sobres la claves primarias…. cuando se cambian los valores de las claves, se tienen que modificar el indice lo cual puede ser muyyyyyy costoso).

Lo que yo te digo igual es que debes estar intentando un diseño medio raro… por el código que pusiste estas intentando usar el id de un producto para setear el id (la clave primaria) de una fila en la tabla MProductQuery. Para lo único que puede tener sentido esto es para tener una relación 1 a 1 entre entre queries y productos (e.d un producto puede tener asociado a lo máximo una query ); si no es tu intención, entonces no se para que queres setear especificamente el id en la tabla query; si es tu intención, entonces deben haber mejores diseños.