是否有可能让NHibernate从ID自动生成属性?

时间:2009-04-06 10:31:58

标签: nhibernate

我在NHibernate持久化的类上有以下属性:

public virtual string Code
{
    get { return Id.ToString("SP000"); }
}

但是我来这样做,这当然不起作用:

Session.Linq<MyType>().Where(x => x.Code.Contains(searchTerm));

那么,是否可以将Code存储在数据库中并让NHibernate管理

.ToString("SP000")

设置ID时设置ID?

编辑:我想我需要一个拦截器,但我不确定如何实现我需要的东西。任何帮助表示赞赏

由于

安德鲁

2 个答案:

答案 0 :(得分:1)

让我重申一下这个问题,以确保我理解它:您有一个映射到Id属性的整数主键,但您想查询Code属性是一个只读字符串。如果您有包含代码“SP123”和“SP234”的记录,则查询将返回searchTerm“2”的两个记录。

尝试使用HQL(Hibernate查询语言)代替Linq进行此查询。您可以在HQL中使用SQL函数,因此您的查询将类似于:

"from Table t where 'SP' + CAST(Id AS varchar) LIKE '%" + searchTerm + "%'";

您需要重写它以使用参数,这样它就不会受到SQL注入攻击的攻击。<​​/ p>

答案 1 :(得分:0)

将代码映射为hbm中的只读属性,然后您可以以您喜欢的任何方式搜索它!

作为改变id的副作用,您还应考虑为其添加唯一约束,并设置属性update = false属性。

亲切的问候