[odb-users] Many-to-many adding values to join table.
    Boris Kolpackov 
    boris at codesynthesis.com
       
    Sat Jul  9 15:42:16 EDT 2011
    
    
  
Hi Rafael,
Rafael Pena <pena.rd at gmail.com> writes:
> I am a bit confused about the  many-to-many relationship. How do I add the
> relationship when when both entities already exist?
> These are my classes:
> 
> class PartData {
>
> [...]
>
>     #pragma db id auto
>     //other fields go here
> 
>     unsigned long partdataid;
> 
>     #pragma db not_null inverse(parts)
>     std::vector<weak_ptr<TestData> > tests;
> };
> 
> class TestData {
>
> [...]
>
>     #pragma db id auto
>     unsigned long testdataid;
>      //other fields go here
>     #pragma db not_null unordered
>     std::vector<shared_ptr<PartData> > parts;
> };
> 
> When both already exist and I add one (parts.push_back()) to the other. How
> do I add to the join table?
You will need to modify the direct (non-inverse) object (TestData) and
update its state in the database, for example:
shared_ptr<PartData> pd = ...; // Already persisted object.
shared_ptr<TestData> td = ...; // Already persisted object.
td->parts.push_back (pd);
db->update (td);
You should probably also update the non-inverse side so that your
in-memory model is consistent.
> Anybody have an example?
The example that shows how to work with bi-directional relationships
is called 'inverse'.
> Right now I am just running an insert query:
> 
> db->execute("insert into TestData_parts values (" + testid+","+
> partdataids.str() + ")");
No, this is definitely not the way to do it.
Boris
    
    
More information about the odb-users
mailing list