Re: "Can't get primary key from temporary id" :(

From: Aristedes Maniatis (ar..sh.com.au)
Date: Tue Apr 21 2009 - 20:17:20 EDT

  • Next message: Aristedes Maniatis: "Re: Best Practices Question"

    On 22/04/2009, at 2:58 AM, Robert Zeigler wrote:

    > Hm.... have you considered using runtime relationships? (NOTE: I've
    > never played with this, myself, so take the next bit with a grain of
    > salt. :)
    > In theory, it's entirely possible with cayenne to have a single
    > generic data object and then modify the mapping information at
    > runtime as necessary.
    > So... I /think/ you could do something along the following lines:
    >
    > Register a global lifecycle listener that listens to whatever events
    > you need: in your case, I would say you probably need post-load and
    > pre-persist?
    > And then you can add the relationship information that you need or
    > that cayenne needs?
    > Then the info is there for cayenne to work with. And then you can
    > use the generic writeProperty/writeRelationship methods to access
    > the information in those properties as needed.
    > This might be a long shot...dunno... like I said... I haven't tried
    > it. But if I wanted to have relationships without having
    > relationships, this is likely the approach I would start looking at.
    >
    > I'd be interested in hearing what others have to say... feasible
    > given the current cayenne stack?

    Unless you have real database relations you aren't going to get any
    benefit of being able to use Cayenne to follow relations. At some
    point in Cayenne it will try to follow joins by using SQL JOINs.
    Unless Andrus has a trick for making this work, I suspect your
    approach is clever but ultimately will run into difficulties.

    The problem is that the original poster is trying to use Cayenne like
    he uses pure SQL and he hasn't demonstrated how he would even achieve
    what he wants with pure SQL (hint: LAST_INSERT_ID() is the mysql
    specific way of getting the last id. His other approaches just don't
    work. But even LAST_INSERT_ID() would probably create race conditions
    with multiple concurrent users.)

    There is however a solution to relationships or attributes which need
    to be added to 75% of the tables in the database: inheritance. In this
    case vertical inheritance is the appropriate choice. We are just now
    testing the excellent work Andrus has done in this area and we have
    all the basic parts of inheritance working in ROP.

    Ari Maniatis

    -------------------------->
    ish
    http://www.ish.com.au
    Level 1, 30 Wilson Street Newtown 2042 Australia
    phone +61 2 9550 5001 fax +61 2 9550 4001
    GPG fingerprint CBFB 84B4 738D 4E87 5E5C 5EFA EF6A 7D2E 3E49 102A



    This archive was generated by hypermail 2.0.0 : Tue Apr 21 2009 - 20:18:10 EDT