我有三张表:
- 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"/>
现在,我尝试选择所有人员,其中包含特定用户的EntrySecret条目:
var query = this.Session.CreateQuery(@"from Person a inner join PersonSecret b
where b.UserId = :userId and b.RemindeBirthday = :remind");
这给了我现在的ExceptionMessage:“期望加入的路径”
有人可以帮助我吗,我做错了什么? - 谢谢。
答案 0 :(得分:3)
您的HQL查询存在一些问题:
PersonSecret.User.Id
属性,而不是UserId
列。Person.PersonSecrets
属性,否则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");
相关资源:
答案 1 :(得分:-1)
你忘记了“开启”一词。
inner join PersonSecret b ON b.PersonId = a.PersonId