代码之家  ›  专栏  ›  技术社区  ›  Brandon Yarbrough

将生成的值插入休眠记录

  •  1
  • Brandon Yarbrough  · 技术社区  · 16 年前

    我正在创建Hibernate小工具的记录。这很基本。我有一个描述对象的hbm.xml文件,一个创建和保存对象的DAO类,等等。

    但是,小部件有一个明确的排序顺序,每个新的小部件都需要插入一个 sortIndex 大于所有其他值的列值 分类索引 列值(即新的小部件最后自动排序)。我一辈子都想不出怎么做到这一点。

    Hibernate完全能够自动设置ID列,我认为它可以根据max(sortindex)+1或某些递增的序列生成器值等公式将其他列设置为唯一值,但在文档中找不到此类内容的引用。有人能给我指个方向吗?

    突然想到的一种方法是手动查询最高排序索引,但我开始担心两个不同的事务,它们都找到了相同的新排序索引。

    1 回复  |  直到 16 年前
        1
  •  1
  •   waxwing    16 年前

    我不想这么说,但我认为你最好还是用程序来做。只是以下几行的内容:

    public void saveNewWidget(Widget widget) {
        Session session = ...;
        int sortIndex = ((Integer) session.createQuery("select max(w.sortIndex) from Widget w").uniqueResult()) + 1;
        widget.setSortIndex(sortIndex);
        session.save(widget);
    }
    

    (注意:不安全。我想不出一个安全的好办法,除非把整张桌子锁上。我要责怪疲劳。)

    原因是看起来两者都不是 UserType 也不是习俗 Interceptor 可以在这里帮你。所以,如果你 真的? 如果你想自己写,你可能得自己写 ClassPersister . 这就是通往疯狂的道路。