You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-user@db.apache.org by Joe Morrogh <jm...@hotmail.com> on 2005/03/28 03:54:11 UTC
Problem with Criteria After Deserializing
Hi,
I've got a Torque 3.0 application (part of a Turbine 2.2 webapp) and I want
to add persistent query
funtionality to it. Since the Torque Criteria class already represents a
set of query criteria, and is serializable, it seems logical to persist
instances of this class for my purposes. The problem I'm
having is that the deserialized Criteria object doesn't behave exactly the
same as the object that
existed prior to serialization. Specifically, my Criterion objects in the
hash seem to contain an
addtional layer of Criterion objects after deserialization. For example, if
my search criteria is "MY_TABLE.MYCOLUMN = 'AAA'", before serialization,
I've got one Criterion in the hash whose value is "AAA". After
serialization, I've still got one Criterion in the hash, but the value is
not the String
"AAA", but another Criterion object, whose value is then "AAA". The end
result of all this is that when the query is generated, I end up with an
invalid query like:
select * from MY_TABLE where MYCOLUMN=MYCOLUMN='AAA'
I'm rying to avoid coding my own classes to represent the "where clause".
Any ideas?
TIA,
Joe
Below is a simple program that demonstrates the problem.
import java.io.*;
import org.apache.torque.util.Criteria;
public class SerializeCriteriaTest {
public static void main(String args[]) throws Exception {
System.out.println("Entering SerializeCriteriaTest::main");
Criteria criteria = new Criteria();
criteria.add("MY_TABLE.MYCOLUMN", (Object) "AAA",
Criteria.EQUAL);
System.out.println(criteria.toString());
ByteArrayOutputStream bas = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bas);
oos.writeObject(criteria);
byte [] bytes = bas.toByteArray();
System.out.println("the length of bytes is " + bytes.length);
Criteria criteriaReborn =
(Criteria) new ObjectInputStream(new
ByteArrayInputStream(bytes)).readObject();
System.out.println(criteriaReborn.toString());
}} // end class
Here's the stdout
Entering SerializeCriteriaTest::main
Criteria:: MY_TABLE.MYCOLUMN<=>MY_TABLE.MYCOLUMN='AAA':
Current Query SQL (may not be complete or applicable):
the length of bytes is 1544
Criteria:: MY_TABLE.MYCOLUMN<=>MY_TABLE.MYCOLUMN=MY_TABLE.MYCOLUMN='AAA':
Current Query SQL (may not be complete or applicable):
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscribe@db.apache.org
For additional commands, e-mail: torque-user-help@db.apache.org