|
|
1
5
好吧,进一步的研究让我相信,在使用存储过程时,在nhibernate中不可能有复合ID。 为此,我修改了我的SQL以包含rowNumber(),并将其用作一个ID。我只能这样做,因为它是只读的,不向数据库写入数据,但它是为我的目的工作的。 |
|
|
2
2
在过去,当我使用复合键时,我总是必须为该ID创建一个单独的类,该类的属性与复合键的属性匹配。你试过这个吗? |
|
|
3
2
正如接受的答案中所提到的,我最终使用了rownum函数,在Oracle中使用了一个唯一的行号黑客。后来,我在使用不同参数重用查询时遇到了一个问题。似乎nhibernate记住了这些ID,并希望将它们与新返回的结果关联起来,从而返回不正确的行。我通过将行数与时间戳组合来修复此问题:
这样,每次查询结果都会得到全新的ID。只需确保使用足够大的整数来保存映射对象中的值。我用
|
|
|
4
1
今天有点晚了,但我可以在马克·斯特鲁津斯基之后——这是可能的。 我最近遇到了这个问题,并通过使用组合键的单独类和映射中的元素来解决它,如下所示。
请注意,返回列元素中的“name”属性表示结果集中的名称,其顺序应与ID类中的属性相同。 |