[odb-users] Initial load with join

Boris Kolpackov boris at codesynthesis.com
Thu Oct 30 09:17:53 EDT 2014


Hi Sean,

Sean Clarke <sean.clarke at sec-consulting.co.uk> writes:

>    doing some more evaluation with ODB, I don't know if I have missed
> something - but is there a way to perform initial loads with a  join?
> Similiar to teh Hibernate eager cache..... as an example:
> 
> 3 classes and tables:
> 
> Job
> JobSheet
> Address
> 
> 
> A job has a jobsheet and an address: When I load a job is there away to get
> the other two entities populated from the same initial load. Presently I
> seem to get 3 separate SQL statements per load and this hugely effects
> performance, especially over a WAN.

Yes, ODB will use three separate statements to load each object. This is
geared towards lazy loading (Section 6.4, "Lazy  Pointers").

The ODB way to achieve what you want is to use views (Chapter 10). They
not only allow you to load data from multiple objects, but you can also
only load the data that you actually need.

Now if you need to load all three objects completely, views can be quite
awkward. To resolve this we are planning to add what we call object
loading views. The syntax will be along these lines (not finalized yet):

#pragma db view object(Job) object(JobSheet) object(Address)
struct JobAndRelated
{
  std::shared_ptr<Job> job;
};

This feature is pretty high up on our TODO list.

Boris



More information about the odb-users mailing list