Hello All,

We have couple of one-to-one relations mapped with primary key. The 
optional part is mapped with constraint="true" and this object is being 
eager fetched along with primary object and that part is working fine. The 
problem happens when we enable level 2 caching on both entities. In this 
case every cache hit for main entity leads to SELECT for optional entity 
which doesn't exit.

Product => ProductId, Name,....
Kit => ProductId, SomeField

Product and Kit share same primary key where only some products can be Kit 
making it Kit optional in this one-to-one relation. After reading 
documentation and going through different discussions on stack overflow It 
turned out that a less hectic way to implement one-to-one relationship is 
by using foreign key and unique key constraint. This would not only enable 
lazy loading but also help level 2 cache take care of optional Kit entity.

I had to adjust the schema in following way

Product => ProductId, Name, KitId
Kit => KitId, SomeField

where Product now has KitId field which foreign key from Kit table, In 
mappings product looks at kit using many-to-one with unique=true while kit 
has its property-ref set to "Kit"

Level 2 cache is working but I am confused about one thing. 

In profiler I can see that if I just check product.kit.SomeField value it 
registers a select for its related product which is already in cache. This 
seems to be happening due to property-ref="Kit' which basically seems to 
tell that *select * from Product where KitId=32* and because cache only 
works for direct Id loads hence this results in cache miss. If I remove 
property-ref then nhiberate try to use KitId value to load product and 
fails. 

My question is can I remove this extra SELECT and instead make it use 
already loaded product from cache? One idea is to keep using shared primary 
key and remove property-ref attribute but that may create circular 
relations and issues with cascades.

Have I mapped it correctly? 

Regards

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.

Reply via email to