代码之家  ›  专栏  ›  技术社区  ›  Roman Zenka

在使用Hibernate的表中只保留不同的值

  •  1
  • Roman Zenka  · 技术社区  · 14 年前

    我正在数据库中存储一个相对复杂的不可变对象。有许多多对一关联-对象具有具有具有属性的属性,等等。

    工作流程如下:

    • 用户创建复杂对象。这可能需要很长时间,代码到处都是。
    • 我查询数据库,查看以前是否已经存储了完全相同的对象:
      • 如果不是, save
      • 如果是,请设置对象的id和 merge

    问题是冬眠 有相当不方便的语义:

    transientObject = createComplexTransientObject();
    mergedObject = session.merge(transientObject);
    // here you have to discard transientObject
    // use mergedObject from now on
    

    创建的对象必须被丢弃并替换为Hibernate提供的对象,这意味着我必须更新对它的所有引用。

    我需要一种方法告诉hibernate:“这个全新的transiento对象似乎与数据库中已经存在的对象完全相同。把它合并在一起。”换句话说:

    object = createComplexTransientObject();
    session.inPlaceMerge(object);
    // object is now persistent
    

    我怎样才能做到?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Jeroen    12 年前

    我相信saveOrUpdate正是你想要的。但它的行为也取决于你的映射。


    这里有点离题了:你知道按示例查询吗? http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html#querycriteria-examples


    不要介意。我只看到这个问题已经两年了。愚蠢的“相关问题”-选择stackoverflow。