Re: UpdateQuery not updating

From: Marek Wawrzyczny (marek_wawrzyczn..nternode.on.net)
Date: Thu Apr 06 2006 - 00:47:12 EDT

  • Next message: Steve Wells: "[ANN] MaCaTa - An introduction by example to 3 frameworks"

    Hi Alan,

    I'd use the Entity classes and treat the records as objects:

    Date dob = null;
    DateFormat df = DateFormat.getDateInstance();
    DataContext ctxt =
                    BasicServletConfiguration.getDefaultContext(request.getSession());

    String customerName = request.getParameter("customerName");
    String dateOfBirth = request.getParameter("dateOfBirth");

    Expression exp = ExpressionFactory.matchExp(
                    Customer.CUSTOMER_NAME_PROPERTY, customerName );
    SelectQuery query = new SelectQuery(Customer.class, exp);

    List customers = null;
    try {
            customers = ContextManager.getSharedContext().performQuery(query);
    } catch (Exception e) {
            // Bad stuff happened, deal with it
            e.printStackTrace();
    }

    // Fetch the record as an Entity class... you can then implement fancy
    // stuff in the Entity class, like conversions...

    // Anyway, we expect only one customer, right?
    Customer customer = (customers != null) && (customers.count() == 1) ?
                    (Customer)customers.get(0) : null;

    if (customer != null) {
            try {
                    dob = df.parse(dateOfBirth);
                    // Of course you could override the setDateOfBirth(...) function to take an
                    // Object and do the parsing itself...
                    customer.setDateOfBirth(dob);
                    ctxt.commitChanges();
            } catch(ParseException e) {
                    System.out.println("Unable to parse ");
            }
    } else {
            // Perhaps notify someone... or something...
    }

    Hope this helps.

    Marek Wawrzyczny

    On Thursday 06 April 2006 08:56, Alan Baltazar wrote:
    > How would you implement your way for updating tables?
    >
    > --- "Gentry, Michael (Contractor)" <michael_gentr..anniemae.com> wrote:
    > > I've never used UpdateQuery before, but try:
    > >
    > > UpdateQuery updated =
    > > new UpdateQuery(Customer.class,
    > > template.expWithParameters(params));
    > >
    > > Also, I don't think you need the commitChanges() at the end ... That
    > > would be more useful if you were working with actual CayenneDataObjects,
    > > which you aren't. Also, I think your object graph might get out-of-sync
    > > this way, which could lead to more problems.
    > >
    > > /dev/mrg
    > >
    > >
    > > -----Original Message-----
    > > From: Alan Baltazar [mailto:acatalan..ahoo.com]
    > > Sent: Wednesday, April 05, 2006 5:13 PM
    > > To: cayenne-use..ncubator.apache.org
    > > Subject: UpdateQuery not updating
    > >
    > >
    > > Hello,
    > >
    > > I'm trying to update a field in a table using the UpdateQuery. The
    > > following code
    > > doesn't update my data.
    > >
    > > Date dob = null;
    > > DateFormat df = DateFormat.getDateInstance();
    > > DataContext ctxt =
    > > BasicServletConfiguration.getDefaultContext(request.getSession());
    > >
    > > String customerName = request.getParameter("customerName");
    > > String dateOfBirth = request.getParameter("dateOfBirth");
    > >
    > > Expression template = Expression.fromString("customerName =
    > > $customerName");
    > > Map params = new HashMap();
    > > params.put("customerName", customerName);
    > >
    > > UpdateQuery updated = new UpdateQuery(Customer.class,template);
    > >
    > > try {
    > > dob = df.parse(dateOfBirth);
    > > }
    > > catch(ParseException e) {
    > > System.out.println("Unable to parse ");
    > > }
    > >
    > > updated.addUpdAttribute("DATE_OF_BIRTH",dob);
    > > ctxt.performNonSelectingQuery(updated);
    > > ctxt.commitChanges();
    > >
    > > return mapping.findForward("success");
    > > }
    > >
    > > this is the mysql table,
    > > CREATE TABLE `CUSTOMER` (
    > > `CUSTOMER_ID` int(10) unsigned NOT NULL ,
    > > `CUSTOMER_NAME` varchar(20) NOT NULL default '',
    > > `DATE_OF_BIRTH` date NOT NULL default '0000-00-00',
    > > PRIMARY KEY (`CUSTOMER_ID`)
    > > ) TYPE=InnoDB;
    > >
    > > here's the data object,
    > > public class _Customer extends org.objectstyle.cayenne.CayenneDataObject
    > > {
    > >
    > > public static final String CUSTOMER_NAME_PROPERTY = "customerName";
    > > public static final String DATE_OF_BIRTH_PROPERTY = "dateOfBirth";
    > > public static final String PRODUCT_ARRAY_PROPERTY = "productArray";
    > >
    > > public static final String CUSTOMER_ID_PK_COLUMN = "CUSTOMER_ID";
    > >
    > > public void setCustomerName(String customerName) {
    > > writeProperty("customerName", customerName);
    > > }
    > > public String getCustomerName() {
    > > return (String)readProperty("customerName");
    > > }
    > >
    > >
    > > public void setDateOfBirth(java.util.Date dateOfBirth) {
    > > writeProperty("dateOfBirth", dateOfBirth);
    > > }
    > > public java.util.Date getDateOfBirth() {
    > > return (java.util.Date)readProperty("dateOfBirth");
    > > }
    > >
    > >
    > > public void addToProductArray(dao.Product obj) {
    > > addToManyTarget("productArray", obj, true);
    > > }
    > > public void removeFromProductArray(dao.Product obj) {
    > > removeToManyTarget("productArray", obj, true);
    > > }
    > > public List getProductArray() {
    > > return (List)readProperty("productArray");
    > > }
    > >
    > >
    > > }
    > >
    > >
    > > if there's any other shorter way to do this with UpdateQuery, I'm
    > > listening
    > >
    > > thanks for any help,
    > > alan
    > >
    > > __________________________________________________
    > > Do You Yahoo!?
    > > Tired of spam? Yahoo! Mail has the best spam protection around
    > > http://mail.yahoo.com
    >
    > __________________________________________________
    > Do You Yahoo!?
    > Tired of spam? Yahoo! Mail has the best spam protection around
    > http://mail.yahoo.com



    This archive was generated by hypermail 2.0.0 : Thu Apr 06 2006 - 00:47:46 EDT