标签: hilo

什么是Hi/Lo算法?

什么是Hi/Lo算法?

我在NHibernate文档中找到了这个(它是生成唯一键的一种方法,第5.1.4.2节),但我没有找到它如何工作的很好的解释.

我知道Nhibernate处理它,我不需要知道内部,但我只是好奇.

database algorithm nhibernate hibernate hilo

454
推荐指数
4
解决办法
9万
查看次数

Hibernate,@ SequenceGenerator和allocationSize

我们都知道Hibernate在使用时的默认行为@SequenceGenerator- 它将实际数据库序列增加1,将此值乘以50(默认allocationSize值) - 然后将此值用作实体ID.

这是不正确的行为,并与规范冲突说:

allocationSize - (可选)从序列中分配序列号时的增量.

要明确:我不打算生成ID之间的差距.

我关心的是与底层数据库序列不一致的 ID .例如:任何其他应用程序(例如使用普通JDBC)可能希望在从序列获取的ID下插入新行 - 但所有这些值可能已被Hibernate使用!疯狂.

有人知道这个问题的任何解决方案(没有设置allocationSize=1,从而降低性能)?

编辑:说
清楚.如果最后插入的记录具有ID = 1,则HB同时使用51, 52, 53...其新实体BUT的值:数据库中的序列值将设置为2.当其他应用程序使用该序列时,这很容易导致错误.

另一方面:规范说(根据我的理解)数据库序列应该被设置为51,同时HB应该使用范围中的值 2, 3 ... 50


更新:
正如Steve Ebersole在下面提到的:我可以通过设置启用我描述的行为(也是最直观的行为)hibernate.id.new_generator_mappings=true.

谢谢大家.

更新2:
对于未来的读者,您可以在下面找到一个有效的例子.

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ")
    @SequenceGenerator(name = "USERS_SEQ", sequenceName = "SEQUENCE_USERS")
    private Long id;
}
Run Code Online (Sandbox Code Playgroud)

persistence.xml中

<persistence-unit name="testPU"> …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa hilo

109
推荐指数
2
解决办法
11万
查看次数

HiLO用于实体框架

是否有人为实体框架实现了HiLO密钥生成器.

在此处阅读有关HiLo的更多信息:我建议您阅读http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html,以获取有关选择身份的缺点的详细说明.

hilo entity-framework-4

16
推荐指数
2
解决办法
3527
查看次数

是否有从标识列迁移到hilo键的实用方法?

我使用的数据库严重依赖于标识列.但是,由于我们现在已将所有应用程序移至NHibernate,因此我希望使用HiLo,因为似乎建议使用NHibernate.是否有任何策略可以做到这一点,或者需要注意哪些常见问题?

nhibernate identity sequence hilo

15
推荐指数
2
解决办法
2224
查看次数

HiLo算法的MaxLo值是多少?

在我目前的设计中,我有希洛设置有一个MaxLo1000.这是过度的吗?我可以将这个数字减少到类似的数字100并仍然可以吗?

public class HiLoConvention : IIdConvention
{
    public void Apply(IIdentityInstance instance)
    {
         instance.GeneratedBy.HiLo("1000");
    }
}
Run Code Online (Sandbox Code Playgroud)

nhibernate hilo

11
推荐指数
1
解决办法
2048
查看次数

NHibernate中的hilo错误 - "无法读取hi值 - 您需要填充表格"

我使用SchemaExport为我的(SQL 2005)数据库生成了一个模式,并创建了一个表

CREATE TABLE [dbo].[hibernate_unique_key](
    [next_hi] [int] NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

当我尝试添加实体时,我收到错误"无法读取hi值 - 您需要填充表格".我打算做什么?

编辑:我已经在表中插入1,它似乎工作.这是正确的价值吗?

nhibernate fluent-nhibernate hilo

10
推荐指数
1
解决办法
1万
查看次数

NHibernate HiLo - 每个实体的新列和HiLo捕获

我目前正在为我的课程使用hilo id生成器,但刚刚使用了最少的设置,例如


<class name="ClassA">
    <id name="Id" column="id" unsaved-value="0">
      <generator class="hilo" />
    </id>
...

但是我真的要为NHibernate指定一个新列来使用foreach实体并为它提供最大值吗?


<class name="ClassA">
    <id name="Id" column="id" unsaved-value="0">
      <generator class="hilo">
        <param name="table">hibernate_unique_key</param>
        <param name="column">classA_nexthi</param>
        <param name="max_lo">20</param>
      </generator>
    </id>
...
<class name="ClassB">
    <id name="Id" column="id" unsaved-value="0">
      <generator class="hilo">
        <param name="table">hibernate_unique_key</param>
        <param name="column">classB_nexthi</param>
        <param name="max_lo">20</param>
      </generator>
    </id>
...
Run Code Online (Sandbox Code Playgroud)

另外我注意到,当我执行上述操作时,SchemaExport将不会创建所有列 - 只有classB_nexthi,还有其他我做错了.

nhibernate nhibernate-mapping hilo

9
推荐指数
1
解决办法
4301
查看次数

NHibernate和hilo生成器:如何设计关键表?

我准备将我的一些实体从身份转换为hilo id-generator.

我不知道如何设计保持下一个高值的表.

  • 我应该为所有实体或一组相关实体使用单个表吗?
  • 我应该为每个实体使用另一张表吗?
  • 我应该使用每个实体的另一行或列的单个表吗?

有没有最佳做法?需要考虑什么?任何方法都有任何优缺点吗?

nhibernate database-design hilo

8
推荐指数
1
解决办法
1811
查看次数

一旦使用HiLo,如果更改容量(最大Lo)会发生什么?

如果我开始使用HiLo生成器为表分配ID,然后决定增加或减少容量(即最大'lo'值),这是否会导致与已分配ID的冲突?

我只是想知道是否需要在数字上加上一个大红旗,上面写着"永远不要改变这个!"

注意 - 不是特定于NHibernate,我只是对一般的HiLo算法感到好奇.

algorithm hilo

8
推荐指数
1
解决办法
6176
查看次数

什么是NHibernate HiLo发电机参数?

我见过Fabio Maulo的一些文档,它们显示了以下参数:

<id name="Id" type="Int64" column="cat_id">
    <generator class="hilo">
            <param name="table">hi_value</param>
            <param name="column">next_value</param>
            <param name="max_lo">100</param>
    </generator>
</id>
Run Code Online (Sandbox Code Playgroud)

但是,在这个问题上,海报使用了<param name="schema">...我希望能够为HiLo生成器指定模式.

所有发电机参数都有明确的文件吗?我试过谷歌搜索没有成功.

nhibernate hilo

8
推荐指数
1
解决办法
1567
查看次数