我用JPA对此进行了标记,因为JPA和NPA之间的API应该相同,即设置应该相同。在你的脑海中用@替换[]:)
我的数据库中有一个OneToMany关系,我正在尝试映射到某些Entity类。 “很多”方面有一个复合PK,它给了我一些问题。我想我正在做的一切正确,但是我在初始化会话时遇到异常。我正在使用JPA的.NET端口来获取基于属性的映射。
无法确定以下类型: Mariner.Entities.MinimumOrderAmounts.Zone, Mariner.Data,用于列: NHibernate.Mapping.Column(区)
以下是相关代码。
[Entity]
[Table(Catalog = "Atom", Schema = "mariner", Name = "MinimumOrderAmountZone")]
public class Zone {
[Id]
[GeneratedValue(Strategy = GenerationType.IDENTITY)]
public virtual int Id { get; protected set; }
[Length(500, Min = 1)]
[NotNull]
public virtual string Name { get; set; }
[Length(4000)]
public virtual string Description { get; set; }
[OneToMany(MappedBy = nameof(ZoneItem.Zone), Cascade = new[] { CascadeType.ALL })]
public virtual ISet<ZoneItem> ZoneItems { get; protected set; }
[OneToMany(MappedBy = nameof(ZoneSchedule.Zone), Cascade = new[] { CascadeType.ALL })]
public virtual ISet<ZoneSchedule> ZoneSchedules { get; protected set; }
}
[Entity]
[Table(Catalog = "Atom", Schema = "mariner", Name = "MinimumOrderAmountZoneItem")]
public class ZoneItem {
[EmbeddedId]
public virtual ZoneItemId Id { get; set; }
[MapsId("Zone")]
[ManyToOne]
[JoinColumn(Name = "ZoneId")]
public virtual Zone Zone { get; set; }
}
[Serializable]
[Embeddable]
public class ZoneItemId {
[Column(Name ="ZoneId")]
public virtual Zone Zone { get; set; }
public virtual string ItemId { get; set; }
[Enumerated(EnumType.ORDINAL)]
[Column(Name ="ItemTypeId")]
public virtual ItemType ItemType { get; set; }
}
以下是相关的Nuget套餐:
<package id="NHibernate" version="4.0.4.4000" targetFramework="net45" />
<package id="NHibernate.Validator" version="2.0.0.4002" targetFramework="net45" />
<package id="NPersistence" version="2.1.0.11" targetFramework="net45" />
帮助!
答案 0 :(得分:0)
我最后只是添加一个代理键列并将其映射。 NPA似乎不支持这一点(这并不奇怪,因为它在3年内没有更新......也许现在是时候转向别的了。