【发布时间】:2009-12-01 16:57:02
【问题描述】:
我正在尝试将 Hibernate 包裹在现有的数据模型上,正如预期的那样,它有起有落。
我目前的症结是其中一个实体表具有准时态模型;没有行被删除或更新;而是将“is_current”列设置为 false(并使用更新时的新字段创建新行,并使用不同的主键)。
对 Hibernate 来说相对较新,我正在努力研究如何建模,甚至确定它是否可能。好吧,使用自定义 @SQLDelete 注释,删除很简单,但更新看起来很棘手。从理论上讲,这似乎可能是一件非常简单的事情(在元代码中,@SQLUpdate(sql = @SQLDelete + "; " + @SQLInsert))但有明显的复杂性(除了这种语法不存在的事实),部分围绕这样一个事实,即需要在两个语句之间取消主键并在第二个语句中进行更新,我确信还有其他数据一致性问题我还没有考虑过。
有没有一种现实的方法来管理这个,即模型更新为 Hibernate 中的删除 + 插入?
编辑:澄清一下,我知道我可以通过显式指定插入 SQL,然后使用上面的 sn-p(对 SQL 常量的合法引用)以蛮力的方式让它工作进行更新。但是,我真的不想这样做,因为我很高兴 SQL Hibernate 选择默认为插入生成,如果类发生变化,手动写出来会非常脆弱。这是强制执行此操作的最后一个解决方案,但如果我必须手动编写 SQL,它似乎会在某种程度上破坏 ORM 映射器的意义......
双重编辑:即使上述内容也可能不起作用,因为我需要在 SQL 中指定两次主键绑定参数(不可能使用问号),并且我无法说服Hibernate 从 SequenceGenerator 中分配给我一个新的。所以看起来我需要一种编程方法,而不是配置方法——除非我错过了一些特别相关的配置元素。
【问题讨论】:
标签: hibernate