是否可以在hibernate生成的查询中添加参数?

假设我在DB中有一个表’student’非常大。 学生中有几列,包括’id’和’class-id’。

在hbm文件中,我目前有这样的defenter代码:

  student_ID_SEQ 999    

在这种情况下,如果我更新学生持久化课程,查询将如下:

 update .... set .... where ID={id} 

但是出于分区原因,我想在查询中包含class-id,如:

 update .... set .... where ID={id} and class-id={class-id} 

我尝试使用composite-id,但是在composite-id中不允许使用生成器,因为composite-id通常是基于赋值的,而不是基于生成器的。

所以,我只是想知道,是否有可能为hibernate生成的查询添加参数?

不,不幸的是在Hibernate中没有类似的东西。

实际上,由于Hibernate读取关联实体的方式,很难将数据库分区与Hibernate一起使用。 假设我们有实体A与实体B的多对一映射。当Hibernate读取实体A时,它将自动读取实体B.它取决于获取计划和策略B是如何以及何时从数据库中精确加载的,但是在任何情况下,它都是一个不包含where子句中的分区列的查询(如果不使用复合主键)。

我希望Hibernate的未来版本能够考虑到这一点。

但是,您可以查看Hibernate filter ,它们可能对您的分区需求很有用。 请记住,虽然在按ID读取实体时不应用filter,这意味着多对一关联中的读取实体将不包含分区条件。 如果您的数据库支持全局索引(但它们有自己的缺陷),可以通过使用全局索引来解决这个问题。

此外,根据您使用分区的内容,您可以创建包含分区条件的数据库视图,然后将Hibernate实体映射到视图。

或者,正如您所提到的,我也会说这是其他情况下最直接的方法,您可以使用复合主键并使用您自己的id生成器实现(实际上,实现一个,如果实现的话,应该不难)这是你不考虑复合ids的唯一理由。