我有一个问题,NHibernate查询数据库的方式太多次了.我刚刚意识到它可能与n + 1问题有关,但我无法弄清楚如何改变我的映射来解决问题.
正如您将看到的,我的尝试涉及指定不延迟加载其他对象,但它似乎没有做到这一点.
这是查询:
public IQueryable<Report> ReadAll(DateTime since)
{
return m_session.QueryOver<Report>()
.JoinQueryOver(r => r.Mail)
.Where(m => m.Received >= since)
.List()
.AsQueryable();
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的回复!如果您需要有关我的对象或映射的更多信息,请告诉我们.
简化对象图(一些省略):
public class Report : EntityBase
{
public virtual Product Product { get; set; }
public virtual StackTrace StackTrace { get; set; }
public virtual Mail Mail { get; set; }
public virtual IList<ClientUser> ReadBy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
-
public class Product : EntityBase
{
public virtual string Name { get; set; }
public …Run Code Online (Sandbox Code Playgroud) 我的应用程序包含几个片段.到目前为止,我已将它们的引用存储在自定义的Application对象中,但我开始认为我做错了.
当我意识到我的片段对mActivity的所有引用在方向改变后变为null时,我的问题就开始了.因此,当我在方向更改后调用getActivity()时,会抛出NullPointerException.我已经检查过我的片段的onAttach()在调用getActivity()之前被调用,但它仍然返回null.
以下是我的MainActivity的剥离版本,它是我的应用程序中唯一的活动.
public class MainActivity extends BaseActivity implements OnItemClickListener,
OnBackStackChangedListener, OnSlidingMenuActionListener {
private ListView mSlidingMenuListView;
private SlidingMenu mSlidingMenu;
private boolean mMenuFragmentVisible;
private boolean mContentFragmentVisible;
private boolean mQuickAccessFragmentVisible;
private FragmentManager mManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* Boolean variables indicating which of the 3 fragment slots are visible at a given time
*/
mMenuFragmentVisible = findViewById(R.id.menuFragment) != null;
mContentFragmentVisible = findViewById(R.id.contentFragment) != null;
mQuickAccessFragmentVisible = findViewById(R.id.quickAccessFragment) != null;
if(!savedInstanceState != null) {
if(!mMenuFragmentVisible && mContentFragmentVisible) { …Run Code Online (Sandbox Code Playgroud)