1

Hibernate の外部で (MySQL Workbench を使用して) 更新されたオブジェクトが更新されないという問題があります。何が起こるかというと、Hibernate アプリケーションを呼び出して値を確認してから、Workbench を使用してオブジェクトの値を更新し、保存して値が設定されていることを確認し、リフレッシュ後に Hibernate で別の呼び出しを行い、古いままです。価値はそこにあります。オブジェクトは 3 回目の呼び出しで更新されますが、これをすぐに行う必要があります。このインスタンスで古いデータを使用する余裕はありません。

Query q = session.createQuery("SELECT object(o) FROM PortedNumber o WHERE o.number = '" + agiRequest.getDnid() + "'");
List<PortedNumber> portedNumberList = q.list();
if (!portedNumberList.isEmpty()) {
   for (PortedNumber portedNumber : portedNumberList) {
      session.evict(portedNumber);
      session.refresh(portedNumber, LockOptions.READ);
      networkId = portedNumber.getNetwork().getId();
      logger.info("Number is ported to networkId = " + networkId);
      break;
   }
}

更新する値は「portedNumber.getNetwork().getId()」です。どんなガイダンスでも大歓迎です

ありがとう。

4

1 に答える 1

0

Hibernate 3 には、merge() があります (Hibernate 2 では、saveOrUpdateCopy() を使用します)。このメソッドは、Hibernate に他のデタッチされたインスタンスから保存したいインスタンスへの変更を強制的にコピーさせ、保存する前にメモリ内のすべての変更をマージします。

Session session = sessionFactory1.openSession();
Transaction tx = session.beginTransaction();
Item item = (Item) session.get(Item.class, new Long(1234));
tx.commit();
session.close(); // end of first session, item is detached

item.getId(); // The database identity is "1234"
item.setDescription("my new description");
Session session2 = sessionFactory.openSession();
Transaction tx2 = session2.beginTransaction();
Item item2 = (Item) session2.get(Item.class, new Long(1234));
Item item3 = session2.merge(item); // Success!
tx2.commit();
session2.close();
于 2012-12-06T08:23:07.027 に答える