Using DataContext not getting value in database

From: Alex Gunawan Wibowo (netzone_tec..ahoo.com)
Date: Tue Mar 08 2005 - 05:46:38 EST

  • Next message: ron: "using LIMIT and OFFSET"

    Hello,

    i'm experiencing a problem with DataContext's
    getThreadDataContext() method.

    Say I have two tables..

    SOLUTIONS, with attributes: solution_id(PK),
    solution_name, solution_type (FK to SOLUTION_TYPES)

    SOLUTION_TYPES, with attributes: solution_type(PK)

    I'm using Struts, and in an Action, I call the
    DataContext.getThreadDataContext() method to get the
    DataContext object, perform an update on a record
    SOLUTION_TYPES, say, changing TYPE1 to TYPE2.

    Now, I have a record in SOLUTIONS TABLE that's
    referring to the SOLUTION_TYPES table, say a record
    like:
    1, SolutionName1, TYPE1

    The 1st update is successful. Viewing all solution
    types in the database showed that the value has been
    updated.
    Since I'm using MS SQL server, I'm able to view the
    values in database directly. The values have been
    updated correctly:
    --------------------
    SOLUTION_TYPES
    * TYPE2

    SOLUTIONS
    * 1, SolutionName1, TYPE2

    --------------------

    Now, I have another Action to edit the Solutions
    record, and I wanted to display the current
    information in the page. So, I called
    DataContext.getThreadDataContext() in this Action, and
    use it to fetch Solution ID 1.
    Strangely, this fetched object still have the
    following information:
    1, SolutionName1, TYPE1
    Although the value in database clearly have changed.
    Ultimately, my application crashed.

    It seems that the old record is still in the memory,
    and hence Cayenne did not refetch the object, and not
    knowing that solution with id 1 has been changed in DB
    to TYPE2. This is true, since if I restart the
    application (restarting Tomcat), Cayenne fetch
    Solution with ID 1 as 1, SolutionName1, TYPE2.

    My question: how do I make it so that Cayenne does not
    fetch the object from the memory??
    Do i have to use:

    DataContext context =
    BasicServletConfiguration.getDefaultContext(session);
     
    to solve this problem??? (Please don't say yes... it
    would require significant changes in my
    application.... :( )

    Thanks a lot for the help! Sorry for the lengthy
    email....

    Best regards,

    Alex Wibowo

    By the way, the portion of code is here:

    ----------------------------------------------
    Action that perform modification for SOLUTION_TYPES

    DataContext ctxt = DataContext.getThreadDataContext();
    .
    .
    .
    Expression qual =
    ExpressionFactory.matchExp("solutionType", "TYPE1");
    SelectQuery query = new
    SelectQuery(SolutionType.class, qual);
    List result = ctxt.performQuery(query);
    SolutionType aType = (SolutionType) result.get(0);
    .
    .
    .
    aType.setSolutionType("TYPE2");
    .
    .
    .
    ctxt.commitChanges();

    -----------------------------------------------
    Action that fetches SOLUTIONS

    DataContext ctxt = DataContext.getThreadDataContext();
    .
    .
    Solution aSolution = (Solution)
    DataObjectUtils.objectForPK(ctxt, Solution.class,
                        new Integer("1"));
    .
    .
    .
    // This line below is where the error occurred
    if
    (aSolution.getToSolutionType().getSolutionType().compareTo("TYPE1")==0){
      .
    .
              ;
            }

    Cayenne reports this error:
    org.objectstyle.cayenne.CayenneRuntimeException:
    [v.1.1 December 6 2004] Error resolving fault, no
    matching row exists in the database for ObjectId:
    au.com.hybrid.comone.db.beans.SolutionType:
    <solution_type: TYPE1>
    org.objectstyle.cayenne.CayenneDataObject.resolveFault(CayenneDataObject.java:219)

    org.objectstyle.cayenne.CayenneDataObject.readProperty(CayenneDataObject.java:227)
    .
    .
    .

            
                    
    __________________________________
    Celebrate Yahoo!'s 10th Birthday!
    Yahoo! Netrospective: 100 Moments of the Web
    http://birthday.yahoo.com/netrospective/



    This archive was generated by hypermail 2.0.0 : Tue Mar 08 2005 - 05:46:41 EST