1

Hello guys I've tried searching for a solution to this problem for a period of time. Couldn't find it. I have two classes which I will simplify. My problem is that i want a unidirectional one-to-one mapping between Player and Clan. Now I saw examples which have foreign key in ther id. But I don't understand it. This mapping is not producing a column in my Clans table for ClanLeader... Am i missing something? Thank you all for help.

public class Clan{ private Int32 id; public virtual Int32 Id { get { return id; } set { id = value; } } private string name; public virtual string Name { get { return name; } set { name = value; } } private Player clanLeader; public virtual Player ClanLeader { get { return clanLeader; } set { clanLeader = value; } } } 

Then we have mapping for Clan:

<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateSQLite" namespace="NHibernateSQLite" > <class name="GamingOrganizerDomainModel.Clan, GamingOrganizerDomainModel" table="Clans" lazy="false"> <id name="id" access="field" column="Clan_ID" type="Int32"> <generator class="native"></generator> </id> <property name="Name" column="Clan_Name" unique-key="ClanNameConstraint" type="String"/> <one-to-one name="ClanLeader" class="GamingOrganizerDomainModel.Player, GamingOrganizerDomainModel" /> </class> </hibernate-mapping> 

Next is the class Player:

public class Player{ private Int32 id; public virtual Int32 Id { get { return id; } set { id = value; } } private string nickname; public virtual string Nickname { get { return name; } set { name = value; } } } 

And mapping for Player:

<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateSQLite" namespace="NHibernateSQLite" > <class name="GamingOrganizerDomainModel.Player, GamingOrganizerDomainModel" table="Players" lazy="false"> <id name="id" column="Player_ID" access="field" type="Int32"> <generator class="native" /> </id> <property name="nickname" access="field" column="Nickname"/> </class> </hibernate-mapping> 

1 Answer 1

1

Unidirectional one to one relation should be mapped as "many-to-one" element. "one-to-one" is used for bidirectional one to one. See this post for more details. Howerver there are ConfORM mappings as well the article is crystal clear.

You need make only one change in your Clan mapping:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="GamingOrganizerDomainModel" namespace="GamingOrganizerDomainModel" > <class name="Clan" table="Clans" lazy="false"> <id name="id" access="field" column="Clan_ID" type="Int32"> <generator class="native"></generator> </id> <property name="Name" column="Clan_Name" unique-key="ClanNameConstraint" type="String"/> <many-to-one name="ClanLeader" class="Player" /> </class> 

You do not need to write assembly qualified class name in the mapping. Assembly and namespace attributes of hibernate-mapping element specify default namespace and assembly where NH tries to find specific class.

Sign up to request clarification or add additional context in comments.

1 Comment

I am glad that this answer has helped. Please mark this qustion as answered:).

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.