Eager loading aggregate with many child collections

In a comment to my post on lazy loading versus eager loading which you can find here I have been asked whether NHibernate 2.0 can now eagerly load an aggregate where the root has more than one child collection. The answer is yes but... Let's discuss it with a sample.

Imagine having the following (academic) domain model.

image

I have identified a Blog-aggregate. This aggregate has the Blog entity as root and has two child collections Posts and Readers. Additionally it has an Author child. If I want to eager load this aggregate with NHibernate I have several possibilities to do so. (If you are new to NHibernate please refer to this post for a detailed introduction.)

Preparing the initial data

For my tests I need some data in my sample database. I generate a single blog with one author, 3 readers and two posts as follows

private void CreateInitialData()
{
    var author = new Person {Name = "Gabriel Schenker"};
    _blog = new Blog {Name = "NHibernate FAQ", Author = author};
    var readers = new[]
                      {
                          new Person {Name = "John Doe"},
                          new Person {Name = "Sue Foo"},
                          new Person {Name = "Ann Li"},
                      };
    var posts = new[]
                    {
                        new Post {Title = "Lazy Loading - eager loading"},
                        new Post {Title = "MultiCriteria queries"},
                    };
    _blog.Readers.AddAll(readers);
    _blog.Posts.AddAll(posts);
 
    using (ISession session = SessionFactory.OpenSession())
    using (ITransaction transaction = session.BeginTransaction())
    {
        session.Save(author);
        session.Save(_blog);
        transaction.Commit();
    }
}

Not recommended solution

Let's start with the "bad" solution for the problem. I have defined the following test method

[Test]
public void Eager_load_blog_aggregate_in_NOT_recommended_way()
{
    Blog fromDb;
    using (ISession session = SessionFactory.OpenSession())
    {
        string sql = "from Blog b" +
                     " inner join fetch b.Author" +
                     " left join fetch b.Readers" +
                     " left join fetch b.Posts" +
                     " where b.Id=:id";
        fromDb = session.CreateQuery(sql)
            .SetGuid("id", _blog.Id)
            .UniqueResult<Blog>();
    }
 
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Author));
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Readers));
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Posts));
    Assert.AreEqual(3, fromDb.Readers.Count);
    Assert.AreEqual(2, fromDb.Posts.Count);
}

This works, that is my test is green. Work done, I can go home - or can't I?

No, the fact that the test passes does not mean, that this is a GOOD solution! Let's analyze what SQL NHibernate generates. It is similar to that:

select          blog.Id as Id1_0_, 
                author.Id as Id2_1_, 
                readers.Id as Id2_2_, 
                posts.Id as Id3_3_, 
                blog.Name as Name1_0_, 
                blog.Author as Author1_0_, 
                author.Name as Name2_1_, 
                readers.Name as Name2_2_, 
                posts.Title as Title3_3_, 
                readers.BlogId as BlogId0__, 
                readers.Id as Id0__, 
                posts.BlogId as BlogId1__, 
                posts.Id as Id1__ 
from            Blog blog 
inner join      Person author on blog.Author=author.Id 
left outer join Person readers on blog.Id=readers.BlogId 
left outer join Post posts on blog.Id=posts.BlogId 
where           blog.Id='090de8b6-4c36-4f73-9d63-12dbd6b332b2'

Please notice that you have three joins, an inner and two outer joins. NHibernate returns a single set of records containing the cross product of all three joins. That is: if a blog has one author, 10 posts and 100 readers the result set will have 1*10*100 = 1000 records. If you have 100 posts and 1000 readers you will get a set with 100'000 records!

Now imagine the blog having three child collections instead of 2... the situation would be catastrophic and your DBA would insist that you get fired.

Is there a better way? Of course! NHibernate 2.0 introduces the IMultiQuery and IMultiCriteria interfaces. With these interfaces you can send several select statements to the database in one go (Note: not all databases support this, check your provider)

Better solution

HQL Multi Query

Let's start with the MultiQuery class. I define a test method as follows

[Test]
public void Eager_load_blog_aggregate_with_multi_query()
{
    Blog fromDb;
    using (ISession session = SessionFactory.OpenSession())
    {
        var sql1 = "from Blog b inner join fetch b.Author where b.Id=:id";
        var sql2 = "from Blog b inner join fetch b.Readers where b.Id=:id";
        var sql3 = "from Blog b inner join fetch b.Posts where b.Id=:id";
 
        var result = session.CreateMultiQuery()
                        .Add(session.CreateQuery(sql1))
                        .Add(session.CreateQuery(sql2))
                        .Add(session.CreateQuery(sql3))
                        .SetParameter("id", _blog.Id)
                        .List();
        IList list = (IList) result[0];
        fromDb = list[0] as Blog;
    }
 
    Assert.AreNotSame(_blog, fromDb);
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Author));
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Readers));
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Posts));
    Assert.AreEqual(3, fromDb.Readers.Count);
    Assert.AreEqual(2, fromDb.Posts.Count);
}

NHibernate now sends 3 select statements in a single call to the database. I'm using an SQL Server 2005 database and the SQL sent by NHibernate is this

select  blog0_.Id as Id1_0_, 
        person1_.Id as Id2_1_, 
        blog0_.Name as Name1_0_, 
        blog0_.Author as Author1_0_, 
        person1_.Name as Name2_1_ 
from    Blog blog0_ 
inner join Person person1_ on blog0_.Author=person1_.Id 
where (blog0_.Id=@p0 );
 
select  blog0_.Id as Id1_0_, 
        readers1_.Id as Id2_1_, 
        blog0_.Name as Name1_0_, 
        blog0_.Author as Author1_0_, 
        readers1_.Name as Name2_1_, 
        readers1_.BlogId as BlogId0__, 
        readers1_.Id as Id0__ 
from    Blog blog0_ 
inner join Person readers1_ on blog0_.Id=readers1_.BlogId 
where (blog0_.Id=@p1 );
 
select  blog0_.Id as Id1_0_, 
        posts1_.Id as Id3_1_, 
        blog0_.Name as Name1_0_, 
        blog0_.Author as Author1_0_, 
        posts1_.Title as Title3_1_, 
        posts1_.BlogId as BlogId0__, 
        posts1_.Id as Id0__ 
from    Blog blog0_ 
inner join Post posts1_ on blog0_.Id=posts1_.BlogId 
where (blog0_.Id=@p2 );
 
; @p0 = '8558ccf4-449f-497a-8619-12458a0aa402', 
@p1 = '8558ccf4-449f-497a-8619-12458a0aa402', 
@p2 = '8558ccf4-449f-497a-8619-12458a0aa402'

SQL server will return 3 sets of records having 1, 3 and 2 records each (in our case). If I now assume I have a blog with 1 author, 10 posts and 100 readers SQL server will return 1+10+100=111 records. That's significantly less than in the bad sample from above where the database returns 1000 records. The situation is even better for the situation where I have 100 posts and 1000 reader. Here the database will return only 1+100+1000 = 1101 records. Compare this to the 100'000 records of the bad sample!

Multi Criteria Query

You can get the same result when using Criteria Queries. Take a look at the following test method

[Test]
public void Eager_load_blog_aggregate_with_multi_criteria()
{
    Blog fromDb;
    using (ISession session = SessionFactory.OpenSession())
    {
        var criteria1 = DetachedCriteria.For<Blog>()
            .Add(Restrictions.Eq("Id", _blog.Id))
            .SetFetchMode("Author", FetchMode.Eager)
            .CreateCriteria("Readers", JoinType.LeftOuterJoin);
        var criteria2 = DetachedCriteria.For<Blog>()
            .Add(Restrictions.Eq("Id", _blog.Id))
            .CreateCriteria("Posts", JoinType.LeftOuterJoin);
 
        var result = session.CreateMultiCriteria()
            .Add(criteria1)
            .Add(criteria2)
            .List();
        IList list = (IList) result[0];
        fromDb = list[0] as Blog;
    }
 
    Assert.AreNotSame(_blog, fromDb);
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Author));
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Readers));
    Assert.IsTrue(NHibernateUtil.IsInitialized(fromDb.Posts));
    Assert.AreEqual(3, fromDb.Readers.Count);
    Assert.AreEqual(2, fromDb.Posts.Count);
}

Here I only have defined 2 criteria since the blog has exactly one author I condensed the join with author and the join with readers. The resulting SQL is for my SQL server 2005

SELECT this_.Id as Id1_2_, 
this_.Name as Name1_2_, 
this_.Author as Author1_2_, 
person3_.Id as Id2_0_, 
person3_.Name as Name2_0_, 
person1_.BlogId as BlogId4_, 
person1_.Id as Id4_, 
person1_.Id as Id2_1_, 
person1_.Name as Name2_1_ 
FROM Blog this_ 
left outer join Person person3_ on this_.Author=person3_.Id 
left outer join Person person1_ on this_.Id=person1_.BlogId 
WHERE this_.Id = @p0;
 
SELECT this_.Id as Id1_1_, this_.Name as Name1_1_, 
this_.Author as Author1_1_, 
post1_.BlogId as BlogId3_, 
post1_.Id as Id3_, 
post1_.Id as Id3_0_, 
post1_.Title as Title3_0_ 
FROM Blog this_ 
left outer join Post post1_ on this_.Id=post1_.BlogId 
WHERE this_.Id = @p1;
 
; @p0 = 'dc29a877-3b28-4c3a-b8dd-4e015d77851d', 
@p1 = 'dc29a877-3b28-4c3a-b8dd-4e015d77851d'

Summary

I have shown you several ways how to eagerly load an aggregate where the root is having more than one child collection. I also have shown the pitfalls of a possible (bad) solution.

Blog Signature Gabriel .

Print | posted on Sunday, April 06, 2008 10:11 AM

Comments on this post

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Keep the good work up guys. This is great stuff. I have been dying for a blog with good examples about scenarios about nhibernate queries. The samples are well documented as well.

For a future posting, could you do one on complex mappings that people may run into? This is one area where I am still very weak. An example would be inheritance mapping options and perhaps one-to-one associations with nhibernate or how you would approach it. Great post!
Left by Sean Chambers on Apr 06, 2008 11:43 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Wow. This is powerful. Do you mind sharing the source code for this and your other posts? Each post you have is really interesting.
Left by Chua Wen Ching on Apr 06, 2008 6:29 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Very impressive work!

I'll be watching the progress. This will be one of my daily readings!

Left by Benny on Apr 06, 2008 7:43 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
@Chua: We will setup a source code repository on google soon. Please be patient.
Left by Gabriel Schenker on Apr 07, 2008 6:32 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
this post series is awesome, by the way, I already implemented the sources myself. I can share this if you can't wait the repository to be setup.
Left by jack on Apr 07, 2008 4:44 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Thanks Gabriel :)
Left by Chua Wen Ching on Apr 08, 2008 2:07 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
"Not recommended solution" : Indeed super bad
"HQL Multi Query" : Still fetches Blog-entry data Author + Readers + Posts times, where just one is enough.
"Multi Criteria Query" : Not only fetches blog-entry data Author + Readers + Posts times, but also Author data.
Is there a way to get the optimal:
select * from blog inner join author on ... where blog.id = n
select * from posts where blog_id = n
select * from readers where blog_id = n

Also, how is it possible to optimal queries when the original is a list?
Left by Dennis on Apr 10, 2008 3:43 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
@Dennis: sorry, don't fully understand your comment...
I am talking of eagerly loading a complete aggregate in one go (one call to the database).
Can you specify more precisely where you see a problem?
Left by Gabriel Schenker on Apr 10, 2008 4:13 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
@Gabriel : Two different issues here.
1. The queries issued in your examples are suboptimal.
My simple test in db:
"Not recommended solution":
Sent data: 1574 bytes
Received data: 1480 bytes
"HQL Multi Query":
Sent data: 2028 bytes
Received data: 1054 bytes
"Multi Criteria Query":
Sent data: 1438 bytes
Received data: 1005 bytes
"Optimal":
Sent data: 1224 bytes
Received data: 694 bytes

select blog0_.Id as Id1_0_,
person1_.Id as Id2_1_,
blog0_.Name as Name1_0_,
blog0_.Author_id as Author1_0_,
person1_.Name as Name2_1_
from Blog blog0_
inner join Person person1_ on blog0_.Author_Id=person1_.Id
where (blog0_.Id=1 );

SELECT post1_.Blog_Id as BlogId3_,
post1_.Id as Id3_,
post1_.Id as Id3_0_,
post1_.Title as Title3_0_ FROM post post1_ where post1_.blog_id = 1

select reader_.Blog_Id as BlogId4_,
reader_.Id as Id4_,
reader_.Id as Id2_1_,
reader_.Name as Name2_1_
from person reader_ where reader_.blog_id = 1
GO


2. Grandchildren and children of collections.
benchmarks from llblgen vs. LINQ to SQL eager loading
Left by Dennis on Apr 10, 2008 2:20 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Jack, Can you send me the code on duhoux.patrice@gmail.com ?

Thanks in advance
Left by pduh on Apr 10, 2008 6:48 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Really great tutorial, Gabriel, and easy to follow. However, when I run the multi-query examples, I get a SQL query parsing error on the second SELECT. Did I miss a SQL setup parameter to allow multi queries somewhere? Thanks a lot.
Left by Eivind on Nov 22, 2008 1:44 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Sorry, my fault. SQL Compact does not support multi queries. With SQL Express it works.
Left by Eivind on Nov 22, 2008 6:30 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
These articles rock! Thank you for all the time and effort you've put into them.

I wanted to ask you if there is any way to get nHibernate to use eager loading when querying with Linq?
Left by Tomas Matuschek on Mar 02, 2009 10:32 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Hey, this is a solution i've been searching for for more than 2 weeks. No-one seems to know about this except you!!
The first solution I was actually searching for is the other way around. I wanted to keep the lazy loading always false (all is loaded) and only when loading a list i want to place the lazy to true for some collections. Is that also possible?

Left by Peter Derwa on Apr 21, 2009 1:21 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
I've got 4 one to many bag properties and 10 many to one properties. the many to one properties are not lazy. with the multicriteria that results to loading those 10 many to one properties 4 times, which is taking too long.
Is there another solution except lazy load the many to one properties?
Left by Peter Derwa on Apr 21, 2009 2:22 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
how do i make sure the lazy loading on a collection of one of the collections is false?

greets
Left by Peter Derwa on May 03, 2009 6:34 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Sorry for this question, but if you get in the first query 100,000 records, but only 1001 in the multiquery, what is the excedent data? trash?

Regards
Left by Cesar Sanz on May 20, 2009 10:44 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Great tutorial Gabriel!

My problem seems to be that I'm working with an Oracle 10g db - and the oracleclient cannot do MultiQuery through Criteria API. I'm fairly new to NHibernate and am trying to tackle this very problem:

I have 2 Tables-
1) Concepts
2) Relationships

Concepts are linked to each other by relationships.

Now EACH Concept has 2 lists of Relationships:
1) Where this concept is the source
2) Where this concept is the destination

Everything is set to lazy load in the mapping (as you can imagine the entire thing forms a graph).

All I want to do is query for a Concept 'A' and have my query loadup:
The Concept 'A'
all Relationships that originate from 'A'
all Relationships that end at 'A'
all Concepts at the other end of these relationships.

This should form a Hub n Spoke structure.

How can I do this? Seeing that I'm unable to use IMultiQuery :(

Help will be greatly appreciated.
Left by Arvind Gautam on Sep 29, 2009 5:58 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
All I want to do is query for a Concept 'A' and have my query loadup:
The Concept 'A'
all Relationships that originate from 'A'
all Relationships that end at 'A'
all Concepts at the other end of these relationships.

This should form a Hub n Spoke structure.
Left by Orkut Greetings on Nov 16, 2009 10:43 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
I agree screencasts are a great way to provide learning material for developers. My employer Falafel Software announced the release of Telerik Trainer at TechEd this year which is a WPF application that delivers screencasts on steroids. Falafel developed it for Telerik and it's available for free download here.
Left by Internet Casino Spiele on Dec 11, 2009 11:11 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Nice shoot
Left by Shared Web Hosting on Dec 21, 2009 7:27 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
My employer Falafel Software announced the release of Telerik Trainer at TechEd this year which is a WPF application that delivers screencasts on steroids. Falafel developed it for Telerik and it's available for free download here.
Left by pandora jewelry on Dec 24, 2009 11:54 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Thanks for providing valuable information on the topic. Keep posting
Left by flash messenger on Dec 28, 2009 12:16 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Having read nearly all the blog, I have recognized that being a part of online community gives you an awesome chance to gain more knowledge in different spheres.
Left by web designers los angeles on Jan 04, 2010 12:57 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...

We provide you all Seo,Hosting and including top
web marketing concepts like that– website development,Internet
Marketing,Search Engine Optimization.
Left by sharmawebsolution on Jan 07, 2010 5:46 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
awsome share thanks
Left by make money online on Jan 16, 2010 1:12 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
What's more, a bracelet can also be equipped with different small pandora jewelry and even you can change it according to your mood at any time. Here are some meanings of pendant. Small Plane stands for traveling and adventure ; anchor, stability and hope; your baby's boots, having a lot of babies; small feeding pandora bracelets abundant food; Church means happiness and stability of marriage; dragonfly means riches; Eiffel Tower means travel and exploration; four-leaf clover means fortune; horseshoe means luck; Nest means a happy family; bride shows a happy bride in her coming pandora jewelleryship steering shows calming and confidence; pandora ukcoin pandora beadsshows rich marriage life. Wish bone, dreams being about to come true; pandora charm bracelets, love; one heart shot by an arrow, romantic love; purse, wealth; and heart-shaped lock, true love.tyrtrert
Left by pandora jewelry on Jan 28, 2010 6:36 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
I'll be watching the progress. This will be one of my daily readings!
Left by Love poetry on Feb 04, 2010 4:42 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Nice post for it!

Left by acne treatment on Feb 04, 2010 8:30 PM

# re: Eager loading aggregate with many child collections

Left by ugg boot on Feb 08, 2010 7:02 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Tags: links of london sweetie rings cheap Links of London, links of london jewellery, links of london Ring, links of london bracelets, links of london charms, links of london Earrings, links of london Necklace, links of london Pendant
Left by links of london on Feb 09, 2010 8:59 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Thanks for sharing. i really appreciate it that you shared with us such a informative post..
Bachelors degree | doctorate degrees | online Masters degrees | online phd degree | Diploma Programs
Left by siomy on Feb 09, 2010 9:55 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
I've got 4 one to many bag properties and 10 many to one properties. the many to one properties are not lazy. with the multicriteria that results to loading those 10 many to one properties 4 times, which is taking too long.
Left by poker en ligne gratuitt on Feb 13, 2010 12:26 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
very helpfull thanks
Left by watches uk on Feb 18, 2010 2:03 AM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Very cheap, very seductive, to echocardiography. Strongly recommended! ! !panora jewelry
panora jewelry
Left by pandora jewelry pzm on Feb 21, 2010 2:45 PM

# re: Eager loading aggregate with many child collections

Left by cheap picture frames on Feb 22, 2010 6:06 PM

# luminary gold

Requesting Gravatar...
If you like usingluminary gold to play which needs usebuy luminary gold, you can borrowcheap luminary gold from friends. You can buyluminary online gold,and than you useluminary money to continue the game.
Left by luminary gold on Feb 24, 2010 1:33 PM

# discount Ugg Broome Boots in chestnut leather online sales

Requesting Gravatar...
YS0225A8 Before there was no reason in the world,As now there is!The moncler jackets course of water was my only course,My repetitions oceans' sough and swell ugg adirondack boots!My seasons pleasurable,Before there was no reason in the world,As now there is ugg broome boots!To measure time from sleep I rose to sleep,To measure space I pasturen surprise http://www.edhardy-buy.com/,O meadows of resemblances,I was the grove on whose mosaic floors,The moncler online seeds of otherwise were spent,My gods had many arms,I was the Caesar of unmarshaled grass ugg boots!Faustus in the branches,My first ambitions were my sorrows long!Before there was no reason in the world,As now there is!
Left by discount womens moncler jacket on Feb 24, 2010 11:01 PM

# discount air jordan shoes 23 sales online

Requesting Gravatar...
YS0225A7 when the sun hugs the moon, the sky clses her eyes.when the sun hug the moon the sea quiet her jordans shoes.when the sun hugs the moon,the forest stops her susurrus.when the sun hugs the nike sb dunk high,the desert hodlds her breathe.Thousands of years's waiting is only for this nike acg shoes moment.Never be disappoined.Never give up.It hax been sucha long time.At nike air max 2003 this momentmeet each other in course of time.Do not cry,Moon.I guard you forever.Cause you are in my life,everyting has its meaning.The fascinating Diamond Ring,is the ring i give you,May it give you warm http://www.nikejordanshoes2sell.com/ threduce your tears.Do not cry,Sun,I will be there with you forever/Meeting you has given me precious memeory.The resplendent Baily Beads.is the gem i give you .May i give you cheap air jordan 22 shoes strength, shine in your morning.Meet soon and part soon.It makes peop;e retrospect in spite of lasting a few minutes.A long times waiting is coming.Don't know when the next meeting is .When the sun hugs the Moon. the Moon hugs the sun as well Hugging tightly,regian the lost nicety.
Left by discount nike air max shoes sale on Feb 24, 2010 11:06 PM

# discount air jordan shoes 25 sales online

Requesting Gravatar...
YS0225A6 When you belive,Though hope is frail.It's hard to kill,Who knows what cheap prada shoes miracles,You can achieve,When you belive! Somehow you will,

You will when you belive new nike air max!And in this time of fear, When prayer so often proves in vain, Hope seems lik the http://www.nikeaf1jordanshoes.com/summer birds. Too swiftly flown away, And now I am standing wholesale gucci shoes here.My heart's so full I can't explain.Seeking faith and speaking women's nike shox words I never thought I'd say, They don't always happen when you ask authentic air jordan shoes.And it's easy to give in to your fear. But when you're blinded by your pain!
Left by discount mens moncler down coat on Feb 24, 2010 11:11 PM

# discount ed hardy women long sleeve shirts sales online

Requesting Gravatar...
YS0225A5 If you think you are beaten, you are! If you think you dare noted hardy clothing, you don't! If you want to win but think you can't, It's almost a cinch you won't ed hardy hoodies! If you think you'll lose,you're lost! For out of the world we find.Success begins with a fellow's will,It's all in a ed hardy shirts state of mind! Life's battles don't always go.To the stronger and faster ed hardy coats man,But sooner or later the man who wins,Is the man who thinks he can! When You Belive http://www.edfashionclothes.com/,Many night we've prayed!With no proof anne could hear!In our heart a hopeful moncler online store song,we barely understood!Now we are not afraid !Although we know there's much to fear!We were moving the moncler jackets mountian long,Before we knew we could!There can be miracles!
Left by discount mens moncler down coat on Feb 24, 2010 11:13 PM

# discount christian louboutin sandals online sales

Requesting Gravatar...
YS0226A1 That your heart has been broken,Hear the wds,I'm here, my child,;And know your christian louboutin uk angel has spoken.For even in the darkest hour,When all of discount louboutin shoes hope seems gone,They'll give you strength to live your life,And desire to go on.And if your faith in Heaven, Should ever fade away,They'll help renew your christian louboutin boots spirit, And help you find your way.Even though you're ever filled with doubt, About the christian louboutin pumps life you live,Know that they are there to give you All that they can give.For you see, the Father sent them,Because to Him, you mean so much,That He sent them just for you,my louboutin sale friend,And your life, they will touch.They will always be here,They will never leave your http://www.christianlouboutinshoestore.com/ side;And upon their strength and guidance,You always may rely.Take comfort in their guidance, Draw strength from up above,And know that their sweet presence,Is God's precious gift of love.
Left by cheap christian louboutin shoes on Feb 25, 2010 3:32 PM

# discount women's ugg elsey boots 5596 sales online

Requesting Gravatar...
YS0226A2 If I were a boy again, I would ctice perseverance more often, and never give up a thing because it was ugg australia boots or inconvenient. If we want light, we must conquer darkness. Perseverance can sometimes equal genius cheap ugg boots in its results. “There are only two creatures,” syas a proverb, “who can surmount the pyramids—the eagle and the snail.” If I were a uggs sale boy again, I would school myself into a habit of http://www.topsnowboots.com/ attention; I would let nothing come between me and the subject in hand. I would remember that a good skater never tries to skate in two ugg cardy boots directions at once. The habit of attention becomes part of our life, if we begain early enough. I often hear cheap gucci shoes grown up people say “ I could not fix my attention on the sermon or ugg coquette book, although I wished to do so” , and the reason is, the habit was not formed in youth.
Left by cheap ugg upside boots 5163 on Feb 25, 2010 3:39 PM

# discount Women's ugg adirondack boots II sales online

Requesting Gravatar...
YS0226A3 Hold fast to dreams.For if dreams die. fe is a broken-winged bird,That ugg australia boots can never fly.Hold fast to dreams. For when dreams go,Life is a barren ugg tall boots field, Frozen only with snow !You never know until you try; And you never try unless you really try ugg cardy boot. You give it your best shot; You do the best you can. And if you have done everything http://www.uggsnowbootsbest.com/! In your power,and still,The truth of the uggs argyle knit matter is! That you haven\'t failed at all.When you reach for your dreams,No matter what ugg boots they may be,You grow from the reaching;You learn from the trying;You win from the doing.
Left by cheap ugg classic cardy boots on Feb 25, 2010 3:47 PM

# discount reebok nfl jerseys online sales

Requesting Gravatar...
YS0226A4 A true friend is someone who reaches for ur hand and touches your cheap hockey jerseys heart.There's always going to be people that hurt you,so what you have to do is keep on trusting nfl jerseys and just be more careful about who sport jerseys you trust next time around.Make youself a better person and know who you are discount nba jerseys before you try and know someone else and expect them to know you mlb jerseys on sale.Remember:Whatever happens,happens for a reason.How many people actually have 8 true http://www.nfljerseymlb.com/friends Hardly anyone I know.But some of us have all right friends and good friends.
Left by cheap adiads nba jerseys sale on Feb 25, 2010 3:51 PM

# discount ugg sienna miller boots 5818 sales online

Requesting Gravatar...
YS0226A9 Unwearied still, lover by lover,They paddle in th cold,Companionable ugg australia shoes streams or climb the air;Their hearts have not grown old;ugg coquette Passion or conquest, wander where they will, Attend upon them still ugg adirondack boots. But now they drift on the still water, Mysterious, beautiful; Among what http://www.uggboots4buy.com/ rushes will they build, By what lake’s edge or pool,Delight men’s mbt shoes eyes when I awake some day.To find they have flown uggs classic cardy away?Before there was no reason in the world As now there is I was the bough bent easy by a ugg boots bird I was the vague blue-grazing flock The sleeping and invisible!
Left by cheap women's ugg elsey boots on Feb 25, 2010 3:56 PM

# discount mens air jordan shoes 13 online sales

Requesting Gravatar...
YS0226A10 When you are old and gray and full of sleep,And noddig by the moncler jackets fire, take down this book! And slowly read jordans sheoes , and dream of the soft look,Your eyes had once, and of their cheap nike shoes shadows deep;How many loved your moments of glad grace,And loved your beauty with nike air force 1 love false or true; But one man loved the pilgrim soul in you,And http://www.onestop-onlineshopping.com/ loved the sorrows of your changing face; And bending down beside the designer clothing glowing bars,Murmur, a little sadly, how love fled.And paced upon the mountains overhead discount air jordan shoes,And hid his face amid a crowd of stars.
Left by cheap nike air max 90 online on Feb 25, 2010 4:00 PM

# discount louis vuitton damier canvas handbags online sales

Requesting Gravatar...
YS0226A11 Surrounding you are angels,They are there to guide your pth.If designer purses weaesskn overcomes you,They'll give you strength if you will ask. They are your protection.When discount designer bags on sale life seems too hard to bear,And though you feel alone at times, The louis vuitton 2009 angels ... they are there.Their faces may be hidden And their voices you might not hear,But they are ALWAYS with you,Through your laughter or your tears.http://www.handbags4buy.com/ They'll walk along beside you,They'll guide your leather handbags steps along the way, They'll comfort you and hold you,Protect you dior handbags night and day.They'll hold to your hand tightly ,They'll not ever let it go,And they'll gently lead you cheap designer handbagsforward,Taking each step very slow.For even as you slumber,They watch closely over you;They are there beside you. In each and every thing you do.
Left by cheap nike air max 90 online on Feb 25, 2010 4:07 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...

wedding dresses,wedding gowns,bride dresses,bridesmaids dresses,evening dresses,bridal gowns,flower girl dresses
Wedding Gowns
Formal Gowns
Cocktail Gowns
Find the wedding dress designer and wedding dress that's right for you! Browse dresses from
Bridesmaid Gowns
Evening Gowns
View our selection of exquisite, handmade gowns and dresses for your wedding
Wedding Dresses, Wedding Shoes and Wedding Accessories from wedding shop, the UK's finest collection of designer wedding dresses.
Use the wedding dress and
cheap wedding
wedding dresses
wedding shop
ty
Left by sbb on Feb 27, 2010 10:12 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...

wedding dresses,wedding gowns,bride dresses,bridesmaids dresses,evening dresses,bridal gowns,flower girl dresses
Wedding Gowns
Formal Gowns
Cocktail Gowns
Find the wedding dress designer and wedding dress that's right for you! Browse dresses from
Bridesmaid Gowns
Evening Gowns
View our selection of exquisite, handmade gowns and dresses for your wedding
Wedding Dresses, Wedding Shoes and Wedding Accessories from wedding shop, the UK's finest collection of designer wedding dresses.
Use the wedding dress and
cheap wedding
wedding dresses
wedding shop


gggg
Left by sbb on Mar 02, 2010 8:08 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Thank you for sharing.In the world, abercrombie and fitch is loved by young and old, women and men, adults and kids by its abercrombie store ,abercrombie sale for abercrombie and fitch men or abercrombie and fitch women . And abercrombie & Fitch is the most bought by many people in America, whether it'sabercrombie and fitch clothing or accessories. It has been deeply loved by many young people.
Left by abercrombie & fitch on Mar 03, 2010 6:25 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Everyone would like to havechanel bagswhen you seechanel handbagswhatever you want we providechanelshoes and cheap things

purchasedlouis vuitton shoes go here to buy
gucci shoes do you believeshoes don't miss this chance to choose you like

Newestchanel handbagsgucci handbags

Once you’ve been wearing replica louis vuitton
replica louis vuitton handbags

And If you’re looking forchi straightenersAllowing customers chi

You may find the mostghd straighteners
ghdWell let me go on replica louis vuitton bags
www.louisvuittonol.com">louis vuitton bagsfound me very restless

They had money louis vuitton handbags read about it your self
louis vuitton bagslv handbagson the beautiful designs from the east
Left by asd on Mar 04, 2010 2:23 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
This is a really good read for me, Must admit that you are one of the best bloggers I ever saw.Thanks for posting this informative article.
Left by ucvhost on Mar 06, 2010 2:52 AM

# ugg boots

Requesting Gravatar...


they are very good and useful!!!
ugg outlet
cheap uggs
nike shoes
wholesale watches fgf
Left by ugg boots on Mar 07, 2010 5:29 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
It’s hard to find knowledgeable people on this topic, but you sound like you know what you’re talking about! Thanks Don’t stop writing, you’ve given me lots of good info! Youtube to MP4 Converter
Convert PDF to image
wee
Left by powerpoint on Mar 08, 2010 2:21 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
to make

the hair in nature and bouffant style. Divide the hair into several portions. Use ghd pink to roll them inside

towards your ears. Several minutes later, the hair will roll neatly inside in the branches. Secondly, the active and energetic style with the roll of the

direction in the opposite direction can be made similarly with the formal procedure. All you need to do is to roll the hair outward instead of inward

with ghd mk5.
It is so simple that you can have your own charming short hair style with GHD straightener uk. Besides the new hair styles,ghd straighteners can help you with the puffy hair after you get up which is the annoying thing for many short hair

girls.
So as long as I have the good tool of ghd pink, no matter what the fashion trend goes of hair styles, I will

stick into my favorite neat short hair.
Left by ghd pink on Mar 09, 2010 3:28 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
My hair is just over my ears. I like two kinds of hair styles most. Firstly, use the ghd straighteners to make

the hair in nature and bouffant style. Divide the hair into several portions. Use ghd pink to roll them inside

towards your ears. Several minutes later, the hair will roll neatly inside in the branches. Secondly, the active and energetic style with the roll of the

direction in the opposite direction can be made similarly with the formal procedure. All you need to do is to roll the hair outward instead of inward

with ghd mk5.
It is so simple that you can have your own charming short hair style with GHD straightener uk. Besides the new hair styles,ghd straighteners can help you with the puffy hair after you get up which is the annoying thing for many short hair

girls.
So as long as I have the good tool of ghd pink, no matter what the fashion trend goes of hair styles, I will

stick into my favorite neat short hair.
So as long as I have the good tool of GHD hair straightener
Left by ghd straighteners on Mar 09, 2010 3:33 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
Whenever I hear friends talking about mbt, my feeling would always be a painful mixture of envy and

helplessness. As a matter of fact, I have long been craving about possessing a pair of MBT shoes. To a girl of low stature as me, a pair of mbt shoes could make me seem more slender or least won't be dwarfed by other girls. But its high price always

makes me feel hard to afford due to my restrained financial conditions.
But not long ago, a friend of mine sent me a pair of mbt shoes sale which thrilled me up for several days.

It's not until then that did I realize each penny for it is well paid. Indeed, it really deserves such a high price. I'm only regretting that I didn't

buy one earlier.iend of mine sent me a pair of MBT shoes which thrilled me up for several days. It's not until then that did I realize each

penny for it is well paid. Indee



Left by ghd pink on Mar 09, 2010 3:41 PM

# re: Eager loading aggregate with many child collections

Requesting Gravatar...
I was very pleased to find this site.I wanted to thank you for this great read!! I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post.
cheap vps | cheap hosting
Very useful tips for DBA user's ... thanks
Left by ucvhost on Mar 10, 2010 11:46 PM

Your comment:

 (will show your gravatar)
 
Please add 7 and 1 and type the answer here: