Session.Get for composite ids work as you said (with a full entity).
There is another approach for composite ids, using a class for the id,
a component, in that case get expect an instance of the component
type.

Where did you read about an anonymous type?

You are wrong about the composite id and you are wrong about using a
many to one. You DONT have many profiles for a user, you have only
one, thus it is a one-to-one association (by pk) perfectly supported
by nhibernate.

Composite ids are composite, it is not right having one column.

2011/1/8, Hendry Luk <[email protected]>:
> That's because composite-id is the only way to make many-to-one association
> on your ID. There's no other way.
> You are allowed to have one or more properties as your composite-id. So one
> property is completely a valid mapping.
>
> What's invalid here is apparently the way I retrieve the instance, it had a
> semantic error. The correct way to get the object is:
> session.Get<UserProfile>(new UserProfile{Id = user});
>
> Unfortunately the following code doesnt work either (it fails during the
> logging attempt):
> session.Get<UserProfile>(new {Id = user});
>
> You have to construct an actual fullblown UserProfile entity to represent
> your ID solely for querying purpose.
>
> Similarly, if you have 2 properties under your composite-id, you can't do
> this either:
> session.Get<UserProfile>(new {Id1 = a, id2 = b});
> That will throw an error during logging too. You always have to instantiate
> your entity.
> I havent' had a chance to investigate if this error is just a logging
> problem during the debug-mode, and whether it will actually work just fine
> in the production-mode (non-debug).
>
> Cheers, and so yes I have managed to get that working by instantiating a
> dummy instance of my entity for every call to GetById, which is not optimal
> but it works.
>
> On Fri, Jan 7, 2011 at 10:24 PM, José F. Romaniello
> <[email protected]>wrote:
>
>> I didn't go further on reading this message after i saw the mapping.
>> Composite-id means composite-id, multiples columns are part of the PK and
>> you have *only one.*
>> The weird part of this, is that I'm sure you have read somewhere how bad
>> are composite ids, however you have a pretty common case of one-to-one by
>> primary key, that is very well supported by nhbiernate and you are trying
>> to
>> map it as a composite id.
>>
>> Read the section of one-to-one mapping,
>> http://nhforge.org/doc/nh/en/index.html#mapping-declaration-onetoone
>> you need to use <generator class="foreign" on UserProfile id as described
>> there.
>>
>>
>> 2011/1/7 Hendry Luk <[email protected]>
>>
>>> Hello,
>>> How does one go about reporting a new bug in NH jira?
>>> I encountered the following issue.
>>>
>>> <?xml version="1.0" encoding="utf-8" ?>
>>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
>>>                                      assembly="MyDomain"
>>>                                      namespace="MyDomain.Model">
>>>
>>>     <class name="UserProfile">
>>>
>>>     <composite-id >
>>>       <key-many-to-one name="Id" column="UserId" class="User" />
>>>     </composite-id>
>>>
>>>   </class>
>>> </hibernate-mapping>
>>>
>>> session.Get<UserProfile>(user);
>>>
>>> During debug-mode, that will throw an InvalidCastException from
>>> ComponentType.ToLoggableString() method. It's fine during non debug-mode.
>>>
>>> The cause of that error, as I tracked down, is due to an attempt to get a
>>> string description from entity's ID (User object) by calling
>>> ComponentType.ToLoggableString().
>>> Since we specify neither the property-name nor the class attribute in the
>>> <composite-id> element, nhibernate mistakenly uses EmbeddedComponentType
>>> of
>>> UserProfile class (instead of User class) in its attempt to
>>> GuessEntityMode
>>> of our User object. This will obviously fail, and the logger decides to
>>> throw exception on this situation (it should at least resort to other
>>> method.. afterall its sole purpose is just to print the string
>>> representation of the Id object).
>>>
>>> There's no appropriate workaround that I can think of that wouldn't
>>> compromise what I want to achieve. I can't specify class name in the
>>> <composite-id> element because NH will (inappropriately) complaint that
>>> this
>>> entity doesnt have an ID (because I set the class without the
>>> property-name). And obviously I can't specify the property-name because I
>>> want to have "many-to-one"ed complex type as my ID.
>>>
>>> I strongly believe this is a bug that needs to be fixed, and make the
>>> logging less intrusive. This issue has been raiseed in java's Hibernate
>>> before (
>>> http://opensource.atlassian.com/projects/hibernate/browse/HHH-3148)
>>>
>>> Some ways to fix this that I can think of: not relying on tuplizer for
>>> logging at all, or may be resort to other way to produce the logging
>>> string
>>> in situations when no tuplizer is found (rather than throwing an
>>> exception).
>>>
>>> Cheers
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "nhusers" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<nhusers%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/nhusers?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "nhusers" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<nhusers%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/nhusers?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/nhusers?hl=en.
>
>

-- 
Enviado desde mi dispositivo móvil

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to