一对多映射和附加条件列不是外键的一部分

Posted

技术标签:

【中文标题】一对多映射和附加条件列不是外键的一部分【英文标题】:One to many mapping and additional condition column not part of a foreign key 【发布时间】:2013-11-18 21:55:21 【问题描述】:

我正在尝试解决 XML 映射的问题。 我有两个视图,其中一个是一些表。

Training
- Id int PK
- LanguageId int

Module
 - Id PK
 - TrainingId FK
 - LanguageId int

在两个视图中都将键设置为 id。

我想在 Training 类中使用外键 TrainingId 构建一对多映射,包括不属于主键的列 - LanguageId。这是我现在拥有的 xml 的一部分。

    <bag name="Modules" inverse="true" cascade="none">
  <key>
    <column name="TrainingId"/>
  </key>
  <one-to-many class="Model.Domain.ModuleCategoryTranslationView" />
</bag>

我想以某种方式包含 Training.LanguageId = Module.LanguageId 的条件。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

这实际上没有任何意义。

如果Training ID是PK,它是唯一的吧?那么如何为多种语言创建一个具有相同 ID 的培训呢?

意思是如果Training ID已经是唯一的了,为什么还要在Bag的条件下加上LanguageID?

如果您希望 Training.Id + Training.LanguageID 作为主键,您应该将其映射为复合键并在包中使用它,这应该可以。

不,据我所知,不支持您要求的内容,唯一的方法是定义一个过滤器并在运行时将其应用于您的查询。

【讨论】:

以上是关于一对多映射和附加条件列不是外键的一部分的主要内容,如果未能解决你的问题,请参考以下文章

数据库设计中一对多对多对多关系依据外键的实现条件及方法

SQLAlchemy外键的使用

JPA的一对多,多对多用法

映射关系模板--一对一, 一对多

关于JPA一对一,一对多(多对一),多对多的详解

在一对多映射中使用休眠条件(以行表列作为搜索条件之一的搜索标题表)