0

データベースにデータを更新/挿入できません これは私が持っているテーブルです:

役割 (ID、名前、...)

特権 (ID、名前、...)

RolePrivilege (ID、RoleId、PrivilegeId、IsAllowed)

私は地図を持っています:

public class RoleWithPrivilegesEntityMap : ClassMap<RoleWithPrivilegesEntity>
{
        public RoleWithPrivilegesEntityMap()
        {
            Table( "ROLE" );
            Not.LazyLoad();
            Id( x => x.Id, "ID" ).GeneratedBy.Identity();
            Map( x => x.Name, "NAME" ).Not.Nullable().Length( 100 );
            HasMany(x => x.RolePrivileges)
                .Cascade.AllDeleteOrphan()
                .Inverse()
                .Fetch.Join().KeyColumn("RoleId");
        }
}

public class PrivilegeEntityMap : ClassMap<PrivilegeEntity>
{
    public PrivilegeEntityMap()
    {
        Table("PRIVILEGE");
        Id(x => x.Id, "ID").GeneratedBy.Identity();
        Map(x => x.Name, "NAME").Not.Nullable();
        HasMany(x => x.RolePrivileges)
            .Cascade.AllDeleteOrphan()
            .Inverse()
            .Fetch.Join().KeyColumn("PrivilegeId");
    }
}

public class RolePrivilegeEntityMap : ClassMap<RolePrivilegeEntity>
{
        public RolePrivilegeEntityMap()
        {
            Table("ROLEPRIVILEGE");
            Id(x => x.Id, "R_ID").GeneratedBy.Identity();
            Map(x => x.IsAllowed, "ISALLOWED").Not.Nullable();
            References(x => x.Role)
                .Not.Nullable()
                .Column("R_ID");
            References(x => x.Privilege)
                .Not.Nullable()
                .Column("P_ID");
        }
}

既存のレコードを更新しようとしています

session.SaveOrUpdate(rolePrivilege)

データベースはテーブルRolePrivilegeに挿入しますが、最初にレコードを削除する必要があります。

私は何を間違っていますか?

4

1 に答える 1

0

session.Flush()またはを呼び出さないため、通常はデータベースには何も送信されませんtransaction.Commit()。ただし、ID 生成 ID を使用すると、基本的に NHibernate にすぐに挿入を強制するため、INSERT ステートメントが表示されます。

IdRolePrivilegeEntityを削除して、Role と Priviledge で compositeId を形成することもできます。これにより、パフォーマンスも向上します (すぐに挿入する必要はありません)。

于 2012-11-13T20:47:22.267 に答える