[odb-users] How to change name of relationship table?

Boris Kolpackov boris at codesynthesis.com
Tue Feb 19 02:24:12 EST 2013


Hi Andrei,

Андрей Иванов <andrei.i.ivanov at commandus.com> writes:

> #pragma db object table("dbo.user_addr")
> class useraddress {
> public:
>     #pragma db id
>     int id_addr_;
> };
>
> typedef std::vector<shared_ptr<useraddress>> useraddress_ptrs;
>
> #pragma db object table("dbo.webusers")
> class webuser {
>     ...

So far so good.


>     useraddress_ptrs addresses_;
>     #pragma db object(useraddress) table("dbo.user_addr")

This pragma is not necessary; you have already assigned the table
name to the useraddress persistent object.


>     #pragma db value(useraddress_ptrs) value_not_null unordered  
> id_column("webuser_id") value_column("id_addr") table("dbo.user_addr")

You cannot assign table name to a container value type, only to a
container member (each member gets its own table). I would rewrite
the webuser class like this (i.e., apply the pragma to the member,
not the type):

#pragma db object table("dbo.webusers")
class webuser {
    ...

    #pragma db value_not_null unordered \
               id_column("webuser_id") value_column("id_addr") \
               table("dbo.user_addr")
    useraddress_ptrs addresses_;
};

Boris



More information about the odb-users mailing list