我手上有一个问题,我花了几天时间寻找答案无济于事......
我们正在使用 HiLo Id 生成,只要实体表与 hibernate_unique_key 表在同一架构中,一切似乎都工作正常。
表结构非常简单。我在 db 中有我的 hi 值表作为 dbo.hibernate_unique_key。几个实体表也在 dbo 模式中,它们可以正常工作。然后我们在“Contact”模式下有表(例如 Contact.Person 和 Contact.Address)。
在人员映射文件中:
<class name="Person" table="Person" schema="Contact">
<id name="Id" unsaved-value="0">
<generator class="hilo">
<param name="max_lo">100</param>
</generator>
</id>
...
当我尝试插入一个 Person 实体时,我收到“无效的对象名称'Contact.hibernate_unique_key'的错误。这个错误肯定很清楚。所以我补充说:
<param name="schema">dbo</param>
到我的映射文件/生成器元素。现在,当构建 SessionFactory 时,我得到一个“已经添加了具有相同密钥的项目”。错误。所以现在我有点卡住了。我不能在没有模式的情况下离开 HiLo 生成器,因为它从类中获取模式,并且我无法指定模式,因为它已经被添加(大概是因为它是我的 XML cfg 文件中标识的“default_schema” )。
我在这里完全被冲洗了吗?我必须要么
A) 将我的所有表保存在 dbo 模式中或
B)为数据库中的每个唯一模式创建一个单独的 HiLo Key 表?
这两种情况都不是特别适合我的应用程序,所以我希望我可以“修复”我的映射文件来解决这个问题。