gpt4 book ai didi

nhibernate - 如何在普通 SQL 查询中为连接表定义表别名?

转载 作者:行者123 更新时间:2023-12-02 05:09:59 24 4
gpt4 key购买 nike

我有一个映射为 <join> 的实体像这样的元素:

<class name="Entity" table="Entites">
<id name="Id">
<generator class="guid" />
</id>
<property name="SomeProperty" />
<join table="EntityData" optional="true">
<key column="entity_id" />
<property name="SomeDataProperty />
</join>
</class>

和一个 native SQL 查询应该像这样查询这个实体(实际查询当然要复杂得多,并且使用其他类型的 NHibernate 查询中不可用的 Oracle 功能):

var query = session.CreateSQLQuery(
"select {entity.*} from Entities {entity}" +
"left outer join EntityData data on {entity}.Id = data.entity_id"
);
query.AddEntity("entity", typeof(Entity));

但这不起作用,因为 NHibernate 使用错误的别名(“entity_1_”)注入(inject)连接属性。

我也试过将表别名指定为“{data}”,但是 NHibernate 没有替换它(仍然包含纯 SQL 中的大括号)。

将连接结果添加到查询 ( query.AddJoin("data", "entity.EntityData") ) 也不起作用。我已经对此进行了调试,但 NHibernate 忽略了它,因为在某些时候它会检查该属性是一个集合还是实体(但它是一个组件,所以两个 if 条件都不为真)。

解决方法是像 NHibernate 生成的那样指定连接别名 exaclty(在我的例子中是“entity_1_”),然后一切正常。

有人知道如何正确解决这个问题吗?

编辑:我现在在查询使用继承映射映射的实体时遇到同样的问题。我可以为基本实体定义一个别名,但继承的实体被命名为 entity_1_、entity_2_ 等等。

最佳答案

这似乎是不可能的,所以我现在为它创建了一个功能请求:NH-2822

关于nhibernate - 如何在普通 SQL 查询中为连接表定义表别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6733011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com