流利的hibernate映射多个表

本文关键字:映射 hibernate | 更新日期: 2023-09-27 18:18:30

我有一个UserEntity映射喜欢和得到不能同时取多个包。

错误
public UserEntityMap : ClassMap<UserEntity>
{
   //Other properties
   HasMany(x => x.Addresses).KeyColumn("User_id").Fetch.Join();
   HasMany(x => x.Roles).KeyColumn("User_id").Fetch.Join();
}

当我为用户实体创建查询时,我想获得地址和角色。我应该怎么做才能看到像

这样的输出?
Select * from UserEntity u 
  join Addresses a on u.id=a.User_id 
  join Roles r on u.id=r.User_id where u.id=?

流利的hibernate映射多个表

没有办法生成这样的SELECT语句。

我建议使用批处理抓取。查看更多细节:
  • 如何在NHibernate中加载没有重复的关联?
  • 如何实现批取与流利的NHibernate与Oracle工作时?

调整映射:

public UserEntityMap : ClassMap<UserEntity>
{
   //Other properties
   HasMany(x => x.Addresses)
       .KeyColumn("User_id").Fetch.Join()
       .BatchSize(100);
   HasMany(x => x.Roles)
       .KeyColumn("User_id").Fetch.Join()
       .BatchSize(100);
}

这将允许查询根实体,并且只需几个select就可以获得它们的集合(没有1 + N问题)

还要检查hibernate中N+1问题的解决方案是什么?