基本上我正在尝试与this question做同样的事情但是使用Fluent NHibernate。
这是我的id生成惯例:
public class IdGenerationConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
instance.GeneratedBy.HiLo("1000");
}
}
现在这很好用,但所有类最终都使用相同的next_hi
。
create table hibernate_unique_key (
next_hi INTEGER
)
有谁知道如何指定每个类应该使用它自己的next_hi
?
为了澄清,我希望最终得到类似customer_next_hi
和order_next_hi
的内容,假设它基于列工作。如果它基于行,那么也可以,只要每个实体都知道要使用哪一行next_hi
值。
答案 0 :(得分:1)
在Anthony Dewhirt的博客上发布了一个很好的解决方案:http://www.anthonydewhirst.blogspot.co.uk/2012/02/fluent-nhibernate-solution-to-enable.html
答案 1 :(得分:0)
我还在Fluent NHibernate Google Group中提出了这个问题,看来这样做的唯一方法就是创建一个继承自HiLo或TableGenerator的自定义id生成器类。从我收集的内容来看,关键问题是创建种子表的SQL语句只执行一次,并且没有内置的覆盖或挂钩来使其创建特定于实体的列或行。
所以我需要做this这样的事情。一旦我有一个有效的实施,我会发布更多。
答案 2 :(得分:0)
有趣的问题,但我想知道你为什么要这样做?在(相当小的)缺点上,您将生成更多的数据库请求。从好的方面来说,你会增加你的替代ID空间。但是不是Long / BigInt足以让他们全部合并吗? (最多18,446,744,073,709,551,615 ids!)