[odb-users] Re: session required inside a function with a session
Boris Kolpackov
boris at codesynthesis.com
Thu Jan 30 22:26:39 EST 2014
Hi Simón Emmanuel,
Simón Emmanuel Gutiérrez Brida <simon.gutierrez.brida at gmail.com> writes:
> At line 9 I get a session required exception.
Have you enabled session support for the User and Pattern classes? Citing
Chapter 11, "Session":
"Session support is optional and can be enabled or disabled on the per
object basis using the db session pragma [...]
We can also enable or disable session support for a group of objects
at the namespace level [...]
Finally, we can pass the --generate-session ODB compiler option to
enable session support by default. With this option session support
will be enabled for all the persistent classes except those for which
it was explicitly disabled using the db session."
> 1. vector<User> Driver::retriveUsers() {
> 2. session s;
> 3. vector<User> users(0);
> 4. transaction t (db->begin ());
> 5.
> 6. user_result r (db->query<User> (true));
> 7.
> 8. for (user_result::iterator i (r.begin ()); i != r.end (); ++i) {
> 9. User* user = new User(*i);
> 10. users.push_back(*user);
This is a very round-about and inefficient way of doing it. Instead,
you could simply do:
users.push_back(*i);
But, seeing that you have relationships, a much better version would
be to use shared_ptr:
vector<std::tr1::shared_ptr<User> > users;
users.push_back(i.load ());
Boris
More information about the odb-users
mailing list