У каждого пользователя есть список ролей:
<class name="User" lazy="false" table="Users">
<id name="Id" type="int">
<generator class="native"/>
</id>
<property name="Name" />
<bag name="RoleList" table="User_Role" inverse="true" lazy="false" collection-type="Roles">
<key column="UserId" foreign-key="Id"/>
<many-to-many class="Role" column="RoleId"/>
</bag>
</class>
Я отслеживаю все запросы к серверу SQL.Когда я выбираю пользователя, я также вижу оператор SQL SELECT (что нормально).Проблема заключается в том, что я пытаюсь обновить существующего пользователя (у которого есть роли): я вижу только обновление до User
таблицы, но не до User_Role
(что плохо).
Чтобы уточнить: я не ожидаю вставки / обновления в таблице Role
(но в User_Role
, поскольку роли являются "постоянными" и могут быть присоединены и отсоединены свободно.
Почему выберите работает правильно, но не обновите . пожалуйста? Если вам нужна дополнительная информация - просто спросите - я постараюсь ответить на все второстепенные вопросы.
Обновление: отображение Role
:
<class name="Role" lazy="false" table="Roles">
<id name="Id" type="int">
<generator class="native"/>
</id>
<property name="Name" />
<property name="Description" />
</class>
Обновление N2: Вот как определяются таблицы:
<strong>Role</strong>
таблица:
CREATE TABLE [Roles] (
[Id] INTEGER NOT NULL PRIMARY KEY,
[Name] text NOT NULL,
[LastChanged] INT NOT NULL DEFAULT(0)
);
CREATE UNIQUE INDEX uidxUserName ON Roles (Name COLLATE NOCASE);
<strong>User</strong>
таблица:
CREATE TABLE [Users] (
[Id] INTEGER NOT NULL PRIMARY KEY,
[Name] text NOT NULL,
[LastChanged] INT NOT NULL DEFAULT(0)
);
CREATE UNIQUE INDEX uidxRoleName ON Users (Name COLLATE NOCASE);
<strong>User_Role</strong>
таблица соотношений (внешние ключи):
CREATE TABLE [User_Role] (
[UserId] INTEGER NOT NULL,
[RoleId] INTEGER NOT NULL,
[LastChanged] INT NOT NULL DEFAULT(0),
PRIMARY KEY (UserId, RoleId),
FOREIGN KEY (UserId) REFERENCES Users(Id),
FOREIGN KEY (RoleId) REFERENCES Roles(Id)
);