diff --git a/src/main/kotlin/org/jetbrains/exposed/dao/Entity.kt b/src/main/kotlin/org/jetbrains/exposed/dao/Entity.kt index ca3eb41c8c..96b597670c 100644 --- a/src/main/kotlin/org/jetbrains/exposed/dao/Entity.kt +++ b/src/main/kotlin/org/jetbrains/exposed/dao/Entity.kt @@ -117,14 +117,16 @@ class View> (val op : Op, val factory: EntityClas @Suppress("UNCHECKED_CAST") class InnerTableLink>(val table: Table, - val target: EntityClass) { + val target: EntityClass, + val source: Column<*>? = null) { + private fun getSourceRefColumn(o: Entity<*>): Column> { - val sourceRefColumn = table.columns.singleOrNull { it.referee == o.klass.table.id } as? Column> ?: error("Table does not reference source") + val sourceRefColumn = table.columns.singleOrNull { it.referee == o.klass.table.id && if(source == null) true else it == source } as? Column> ?: error("Table does not reference source") return sourceRefColumn } private fun getTargetRefColumn(): Column> { - val sourceRefColumn = table.columns.singleOrNull { it.referee == target.table.id } as? Column> ?: error("Table does not reference target") + val sourceRefColumn = table.columns.singleOrNull { it.referee == target.table.id && if(source == null) true else it != source } as? Column> ?: error("Table does not reference target") return sourceRefColumn } @@ -251,6 +253,10 @@ open class Entity(val id: EntityID) { return InnerTableLink(table, this@via) } + infix fun > EntityClass.via(sourceColumn: Column>): InnerTableLink { + return InnerTableLink(sourceColumn.table, this@via, sourceColumn) + } + fun > s(c: EntityClass): EntityClass = c open fun delete(){