NHibernate在我进行选择时尝试插入
本文关键字:插入 选择 行选 NHibernate | 更新日期: 2023-09-27 18:22:04
我使用的是NHibernate 3.2
我正在处理一个事务,保存一些东西,在提交之前,我试图查询一些元素,这给我带来了一个oracle插入错误。
我的查询(HQL):
MySession = SessionFactory.OpenSession().BeginTransaction();
/*Do some saves but don't commit*/
var hql = @"select distinct c
from Car c inner join c.Manufacturer manuf where manuf.Id = 449"
MySession.CreateQuery(hql).List<Car>(); /*throws error*/
当我执行这个查询时,它会向我抛出以下错误
ORA-01400: cannot insert NULL ...
我的映射是用创建的
lazy="true" dynamic-update="true" dynamic-insert="true"
会话工厂代码:
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(EstoqueEquipamento).Assembly);
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
谢谢。
NHibernate(FlashMode auto)的默认行为是在执行选择时执行刷新-这不包括ISqlQueries。因此,当您执行hql查询时,就会发生刷新,事实上,刷新发生在hql查询执行之前。
这可能与错误无关,错误只表明它试图保存的实体之一的属性中有一个NULL值,DB会抱怨。
我在这里应该注意,您可能应该将DB约束与映射
由于映射不一致,我以前遇到过问题,特别是我有一个不可为null的属性映射到了一个可为null数据库字段。因此,当我检索关联的实体时,一个默认值被分配给了该属性,这让nhibernate认为该实体是脏的,所以它意外地保存了它。它可能是类似的东西吗?