多对一映射不允许属性

Posted

技术标签:

【中文标题】多对一映射不允许属性【英文标题】:Many-to-one mapping disallows property 【发布时间】:2013-03-01 02:34:45 【问题描述】:

这一定是一些我无法掌握的简单事物。

假设一家企业提供多种服务。一方面,ServiceOffers 作为查找表,BusinessServiceOffers 用于关联。当我添加如下所示的多对一映射时,sqlite 提供程序(在单元测试时)抛出一个参数超出范围异常,这是可以理解的,因为 Property 和 ManyToOne 中的引用重复。

Property(x => x.ServiceOfferingId);
ManyToOne
        (
            x => x.ServiceOffering,
            x =>
            
                x.Fetch(FetchKind.Select);
                x.Lazy(LazyRelation.Proxy);
                x.Column("ServiceOfferingId");
                 x.ForeignKey("FK_BusinessServiceOffering_ServiceOfferingId");
            
        );

删除属性修复了异常问题,但测试一直失败。查看插入的 sql,我看到为 ServiceOfferingId 插入了“null”,而不是分配的 int 值,例如:

INSERT 
INTO
    BusinessServiceOffering
    (BusinessId, IsEnabled, CreatedDate, CreatedByLoginId, ModifiedDate, ModifiedByLoginId, ServiceOfferingId, BusinessServiceOfferingId) 
VALUES
    (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7);
@p0 = 200 [Type: Int32 (0)], @p1 = True [Type: Boolean (0)], 
@p2 = 2/28/2013 6:11:25 PM [Type: DateTime (0)], 
@p3 = 20 [Type: Int32 (0)], @p4 = 2/28/2013 6:11:25 PM [Type: DateTime (0)], 
@p5 = 30 [Type: Int32 (0)], @p6 = **NULL** [Type: Int32 (0)], --->
@p7 = 5 [Type: Int32 (0)]

我尝试在“一个”侧添加一个包,但似乎没有任何区别。

我错过了什么?请注意,我有与 sql server 的集成测试,无论有没有该属性都可以正常运行。但是,使用 sql server 进行的简单读取测试无法返回删除属性的那些字段的任何数据。

似乎我需要正确映射,或者这是一个 sqlite 特质。

请帮忙。

【问题讨论】:

【参考方案1】:

好的。如果他们遇到同样的问题,我自己想出了这个并为其他人发布答案。

    作为空值插入的字段最初不应该在 POCO 中。如果需要,可以通过子/嵌套对象以及正确映射关系来访问它们。 将数据插入 sqlite 遵循对象引用规则。例如,在父子关系中,子节点持有对父节点的关键引用,而父节点具有子节点列表,请先创建并保存父节点,然后再保存子节点。在这种情况下,映射是父项中的一个包/一组子项。还有其他案例我稍后会更新。

【讨论】:

以上是关于多对一映射不允许属性的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate多对一,多对多的表映射关系

idea中注解配置一对多,多对一,双向多对一映射(不详细)

mytabits表关联一对一(多对一?)

Hibernate单向多对一映射关系

具有继承映射的多对一自引用

hibernate多对一关联映射两种形式的理解