Hello,

I'm getting stuck while trying to solve a little problem with nhibernate 
3.3.1GA and mapping and I hope someone can help me.

I have two MySQL tables: User and Category. Each Category *can* reference a 
User Id in the "AssignedTo" column (i.e. AssignedTo can be NULL):

CREATE TABLE User
(
    Id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    Name VARCHAR(128) NOT NULL DEFAULT 'Prova' ,
    LastModified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
    PRIMARY KEY (Id) ,
    UNIQUE INDEX Name_UNIQUE (Name ASC)
)
    
CREATE TABLE Category
(
    Id INT UNSIGNED NOT NULL AUTO_INCREMENT ,
    Name VARCHAR(256) NULL ,
    AssignedTo INT UNSIGNED NULL ,
    PRIMARY KEY (Id) ,
    UNIQUE INDEX AssignedTo_UNIQUE (AssignedTo ASC) ,
    CONSTRAINT fk_Category_User
        FOREIGN KEY (AssignedTo)
        REFERENCES User (Id)
        ON DELETE CASCADE
        ON UPDATE NO ACTION
)

And here is the mapping (sorry for the verbosity):

<class name="User">
    <id name="Id" type="System.UInt32" generator="identity">
        <column name="Id" not-null="true" sql-type="int(10) unsigned" />
    </id>
    <property name="Name" not-null="true" unique="true" 
type="System.String">
        <column name="Name" length="128" not-null="true" unique="true" 
sql-type="varchar(128)" />
    </property>
    <property name="LastModified" not-null="true" type="System.DateTime">
        <column name="LastModified" not-null="true" sql-type="timestamp" />
    </property>
    <one-to-one name="AssignedCategory" class="Category" cascade="all" 
foreign-key="fk_Category_User" property-ref="AssignedTo" />
</class>
    
<class name="Category">
    <id name="Id" type="System.UInt32" generator="identity">
        <column name="Id" not-null="true" sql-type="int(10) unsigned" />
    </id>
    <property name="Name" type="System.String">
        <column name="Name" length="256" sql-type="varchar(256)" />
    </property>
    <many-to-one name="AssignedTo" unique="true" class="User" 
foreign-key="fk_Category_User">
        <column name="AssignedTo" unique="true" sql-type="int(10) unsigned" 
/>
    </many-to-one>
</class>

The problem is that if I assign a User to Category.AssignedTo and then save 
the Category, the field AssignedTo is filled with the correct User.Id. 
However, if I assign a Category to a User.AssignedCategory and then save 
the User, the Category.AssignedTo field is not updated.

Here is the c# code and the generated queries:

Category c = new Category();
c.Name = "General";
s.Save(c);

User u = new User();
u.Name = "Gianni";
u.AssignedCategory = c;
s.Save(u);

s.Flush();

Sql:

INSERT INTO Category (Name, AssignedTo) VALUES ('General', NULL)
SELECT LAST_INSERT_ID()
INSERT INTO User (Name, LastModified) VALUES ('Gianni', NULL)
SELECT LAST_INSERT_ID()

I would have also expected another query updating the foreign key:

UPDATE Category SET AssignedTo = 1

Everithing else is working fine: every query result is correct and if I do

User u = new User();
u.Name = "Gianni";
s.Save(u);

Category c = new Category();
c.Name = "General";
c.AssignedTo = u;
s.Save(c);

s.Flush();

Then everithing works fine.

Can you suggest a solution?

Do you think this is a bug or am I doing something wrong?

Thank you in advance for any help.

Bye,
Gianni

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/nhusers/-/n_w03VLB9zgJ.
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