【问题标题】:Nhibernate bag element not persisting休眠袋元素不持久
【发布时间】:2012-08-03 18:15:37
【问题描述】:

我有一个有两个包的班级。 一个包是一个类的集合,它可以工作,另一个是长值的集合,这个是不持久的。 我已经在整个网络上搜索了这个,我的映射似乎没问题。

在我的映射中,我有这个:

  <class name="Event" table="Events">
    <id name="Id" type="Int32">
        <generator class="native" />
    </id>
    <property name="Name" />
    <property name="Owner" />
    <many-to-one name="DeliveryAddress" column="DeliveryAddressId" cascade="save-update, persist" />
    <many-to-one name="EventAddress" column="EventAddressId" cascade="save-update, persist" />
    <bag name="Friends" table="Event_Friends" lazy="false" inverse="true" cascade="save-update, persist" fetch="join">
      <key column="EventId" />
      <element column="Friend" type="Int64" />
    </bag>
    <bag name="Products" table="Event_Products" lazy="false" inverse="true" cascade="all,delete-orphan" fetch="join">
      <key column="EventId" />
      <one-to-many class="Product" />
    </bag>
  </class>

当我在会话 NHibernate 中调用 SabeOrUpdate 时,创建两个地址、创建事件和所有产品,但未保存朋友列表。 保存后我发出一个Get,并且数据库上的选择是正确的。 我不知道还能是什么。

我的这个映射模型是这样的:

public class Event
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual Int64 Owner { get; set; }
    public virtual Address DeliveryAddress { get; set; }
    public virtual Address EventAddress { get; set; }
    public virtual ICollection<Int64> Friends { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}

我的数据库如下所示:

Events
-------------------------------
Id                int     identity
Name              varchar
Owner             long
DeliveryAddressId int
EventAddressId    int

Address
-------------------------------
Id                int
-- Code Abbreviated --

Event_Products
-------------------------------
Id                int
EventId           int
-- Code Abbreviated --

Event_Friends
-------------------------------
EventId           int
Friend            long

【问题讨论】:

    标签: nhibernate mapping element


    【解决方案1】:

    您应该将 inverse 更改为 false 以获取您的 long 集合

    <bag name="Friends" table="Event_Friends" lazy="false" inverse="false" cascade="save-update, persist" fetch="join">
      <key column="EventId" />
      <element column="Friend" type="Int64" />
    </bag>
    

    【讨论】:

    • 它有效。我不敢相信那是这个。我很确定已经尝试过使用 inverse false,但是经过数小时的测试没有成功,我们不再知道我们真正做了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多