gpt4 book ai didi

NHibernate 内连接给出 "Path expected for join"

转载 作者:行者123 更新时间:2023-12-04 21:24:12 29 4
gpt4 key购买 nike

我有三个表:

- Person
- User
- PersonSecret

其中 PersonSecret 对 Person 和 User 的引用:
<class name="PersonSecret" table="PersonSecret" lazy="false"  >
<id name="Id" column="Id" type="Guid">
<generator class="assigned"/>
</id>
...
<many-to-one name="Person" class="Person" foreign-key="FK_Person_PersonSecret" lazy="proxy" fetch="select">
<column name="PersonId"/>
</many-to-one>
<many-to-one name="User" class="User" foreign-key="FK_User_PersonSecret" lazy="proxy" fetch="select">
<column name="UserId"/>
</many-to-one>

这是从 User 到 PersonSecret 的映射:
<set name="PersonSecrets" lazy="true" inverse="true" cascade="save-update" >
<key>
<column name="UserId"/>
</key>
<one-to-many class="PersonSecret"/>

这是从 Person 到 PersonSecret:
<set name="PersonSecrets" lazy="true" inverse="true" cascade="save-update" >
<key>
<column name="PersonId"/>
</key>
<one-to-many class="PersonSecret"/>

现在,我尝试选择所有人员,这些人员在 PersonSecret 中有一个特定用户的条目:
var query = this.Session.CreateQuery(@"from Person a inner join PersonSecret b 
where b.UserId = :userId and b.RemindeBirthday = :remind");

这给了我现在的 ExceptionMessage: "Path expected for join"

有人可以帮助我,我做错了什么? - 谢谢。

最佳答案

您的 HQL 查询有几个问题:

  • 使用HQL时需要引用模型类上的属性名称 而不是它们映射到的列名。在这种情况下,您应该引用 PersonSecret.User.Id where 子句中的属性,而不是 UserId柱子。
  • 您还应该指定 Person.PersonSecrets join 子句中的属性,否则 NHibernate 将不知道要加入哪些列。
  • 您应该将附加过滤器指定为 加盟条件使用 with关键字而不是在 where 子句中。

  • 这是正确的版本:
    var query = this.Session.CreateQuery(
    @"from Person as a inner join a.PersonSecrets as b with b.User.Id = :userId and b.RemindeBirthday = :remind");

    相关资源:
  • HQL: The Hibernate Query Language - Associations and joins
  • 关于NHibernate 内连接给出 "Path expected for join",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519934/

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