假设我们有一个存储客户详细信息的系统,以及一个存储员工详细信息的系统(假设情况!)。当EmployeeSystem访问员工时,将使用IUserType中实现的WCF从ClientSystem访问客户端信息:
NHibernate映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="EmployeeSystem" namespace="EmployeeSystem.Entities">
<class name="Employee" table="`Employee`" >
<id name="Id" column="`Id`" type="long">
<generator class="native" />
</id>
<property name="Name"/>
<property
name="Client" column="`ClientId`"
lazy="true"
type="EmployeeSystem.UserTypes.ClientUserType, EmployeeSystem" />
</class>
</hibernate-mapping>IUserType实现:
public class ClientUserType : IUserType
{
...
public object NullSafeGet(IDataReader rs, string[] names, object owner)
{
object obj = NHibernateUtil.Int32.NullSafeGet(rs, names[0]);
IClientService clientService = new ClientServiceClient();
ClientDto clientDto = null;
if (null != obj)
{
clientDto = clientService.GetClientById(Convert.ToInt64(obj));
}
Client client = new Client
{
Id = clientDto.Id,
Name = clientDto.Name
};
return client;
}
...
}即使我在属性上设置了lazy="true“,只要加载了员工,它就会加载客户端。这是正确的行为吗?我必须自己在NullSafeGet中实现延迟加载吗?还是我遗漏了什么?
发布于 2011-09-03 00:37:20
这是一对一的关系吗?正如hibernate文档所暗示的那样,这一切都是可能的,在xml配置文件中甚至出现了打开延迟加载以实现一对一关系的选项,但它们显然没有任何效果。
one-to-one lazy association
https://stackoverflow.com/questions/7286132
复制相似问题