说真的,我不敢相信:
我在 Vaadin 框架中使用 entityManager。实现了这个模式(ThreadLocal 和过滤器为每个请求生成 entityManager):
https://vaadin.com/book/-/page/jpacontainer.hibernate.html
如果我写一个测试,它就像魅力一样工作:
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("applicLiquidator.applicLiquidator");
log.trace("created entityManageFactory:" + entityManagerFactory);
EntityManager entityManager = entityManagerFactory.createEntityManager();
CaseEntity case= entityManager.getReference(CaseEntity .class, 1);
entityManager.detach(case);
case.setCompanyFullName("TEST1");
entityManager.getTransaction().begin();
CaseEntity newCase=entityManager.merge(case);
entityManager.getTransaction().commit();
但是在应用程序服务器中它完全以其他方式工作,我记录了所有信息,似乎一切正常,实体具有良好的价值!
public static int saveCase(CaseEntity case, boolean sameTransaction) throws DALException {
EntityTransaction transaction = null;
try {
EntityManager entityManager = EntityManagerUtil.getEntityManagerLIQUIDATOR();
if (sameTransaction == false) {
transaction = entityManager.getTransaction();
transaction.begin();
}
log.info("-------BEFORE PERSIST: CASE ENTTIY COMAPNY NAME: " + ugy.getFelszamolandoCegTeljesnev());
ugy=entityManager.merge(ugy);
if (sameTransaction == false) {
transaction.commit();
}
log.info("---------AFTER PERSIST: CASE ENTTIY COMAPNY NAME: " + ugy.getFelszamolandoCegTeljesnev());
return case.getId();
} catch (Exception ex) {
log.error("The entity saved do not completed", ex);
try {
transaction.rollback();
log.info("Rollback was success");
} catch (Exception rollbex) {
log.error("Rollback failed", rollbex);
}
log.info("Entity Saved succesfully!");
throw new DALException(ex);
}
}
如您所见,我尝试刷新、清除、刷新所有内容。需要注意的是,这种情况是一个分离的对象,但据我所知,合并会完成这项工作,但引用不会复制到原始对象,但会(应该)更新具有相同 ID 的实体......
在其他情况下(对于其他实体,此代码就像魅力一样工作),仅在一种情况下,数据库中 id 为 1 的第一个实体正在制造错误!
我不明白为什么会这样,为什么在某些情况下会起作用,为什么不会……以及为什么我在实体属性中看到了好的值,而它只是不生成更新 sql 并且不在持久性上下文和数据库中进行合并/更新,没有错误消息,没有显示,只有功能失常......
如果有人遇到过这种 mistic 错误/问题,我将非常感谢您的答案或任何细微的想法,您想到的任何事情都请花时间回答。
尝试合并实体时记录:
2014-01-21 17:36:11 TRACE LazyEntityManagerFilter:44 - created entityManager:org.eclipse.persistence.internal.jpa.EntityManagerImpl@7b1fe9fb
2014-01-21 17:36:11 WARN UgyController:667 - Event detected private void notImplemented()
2014-01-21 17:36:11 TRACE LazyEntityManagerFilter:51 - destroyed entityManager:org.eclipse.persistence.internal.jpa.EntityManagerImpl@7b1fe9fb
2014-01-21 17:36:11 TRACE LazyEntityManagerFilter:44 - created entityManager:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.387--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, becsultertek, bekerulesidopontja, devizanem, ingosagazonosito, kikerulesidopontja, kikerulesiertek, letrehozva, megnevezes, memo, tarolasihely, telephelyenbelulihelye, tranzakcioskod, utoljaramod_mikor, telephely_felszamolando_ID, ingosagcsoport_ID, utoljaramodositotta_felhasznalo_ID FROM liquidator.ingosag WHERE (telephely_felszamolando_ID = ?)
bind => [1]
[EL Fine]: 2014-01-21 17:36:11.389--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, csoportnev, letrehozva, lockideje, tranzakcioskod, utoljaramod_mikor, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ingosagcsoport WHERE (ID = ?)
bind => [1]
[EL Fine]: 2014-01-21 17:36:11.392--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, csoportnev, letrehozva, lockideje, tranzakcioskod, utoljaramod_mikor, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ingosagcsoport WHERE (ID = ?)
bind => [2]
[EL Fine]: 2014-01-21 17:36:11.394--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, bejelentkezesidopontja, bejelentkezesinev, email, jelszo, keresztnev, kilepesideje, letrehozva, lockideje, memo, sessionlejarat, szerepkor, telefon, tranzakcioskod, utoljaramod_mikor, vezeteknev, cim_ID, utoljaramodositotta_felhasznalo_ID, bejelentkezes_telephelyId, lockbyfelhasznalo_ID FROM liquidator.felhasznalo WHERE (ID = ?)
bind => [3]
[EL Fine]: 2014-01-21 17:36:11.398--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, fajlnev, kiskeptartalom, letrehozva, memo, mimetype, nincskep, tartalom, tranzakcioskod, utoljaramod_mikor, ingosag_ID, utoljaramodositotta_felhasznalo_ID FROM liquidator.kep WHERE (ingosag_ID = ?)
bind => [1]
[EL Fine]: 2014-01-21 17:36:11.4--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, fajlnev, kiskeptartalom, letrehozva, memo, mimetype, nincskep, tartalom, tranzakcioskod, utoljaramod_mikor, ingosag_ID, utoljaramodositotta_felhasznalo_ID FROM liquidator.kep WHERE (ingosag_ID = ?)
bind => [2]
[EL Fine]: 2014-01-21 17:36:11.401--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, becsultertek, bekerulesidopontja, devizanem, ingosagazonosito, kikerulesidopontja, kikerulesiertek, letrehozva, megnevezes, memo, tarolasihely, telephelyenbelulihelye, tranzakcioskod, utoljaramod_mikor, telephely_felszamolando_ID, ingosagcsoport_ID, utoljaramodositotta_felhasznalo_ID FROM liquidator.ingosag WHERE (telephely_felszamolando_ID = ?)
bind => [2]
[EL Fine]: 2014-01-21 17:36:11.402--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, becsultertek, bekerulesidopontja, devizanem, ingosagazonosito, kikerulesidopontja, kikerulesiertek, letrehozva, megnevezes, memo, tarolasihely, telephelyenbelulihelye, tranzakcioskod, utoljaramod_mikor, telephely_felszamolando_ID, ingosagcsoport_ID, utoljaramodositotta_felhasznalo_ID FROM liquidator.ingosag WHERE (telephely_felszamolando_ID = ?)
bind => [3]
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.404--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, belsougyiratszam, elrendeles_doc_fajlnev, elrendeles_doc_memo, elrendeles_doc_mimetype, elrendeles_doc_tartalom, elrendeles_idopontja, elrendeles_ki, elrendeles_memo, felszamolando_ceg_adoszam, felszamolando_ceg_cegjegyzekszam, felszamolando_ceg_memo, felszamolando_ceg_rovidnev, felszamolando_ceg_teljesnev, kozzeteteldatuma, kulsougyiratszam, letrehozva, lockideje, memo, tranzakcioskod, utoljaramod_mikor, zarovegzesdatuma, elrendeles_felhasznalo_ID, ugy_felhasznalo_ID, felszamolando_ceg_cim_ID, telephely_ID, statusz_ID, ugytipus_ID, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ugy WHERE ((ID = ?) AND (aktiv = ?))
bind => [7, true]
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.41--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, letrehozva, lockideje, statusz, tranzakcioskod, utoljaramod_mikor, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ugystatusz WHERE (aktiv = ?)
bind => [true]
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.413--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT DISTINCT f.* FROM felhasznalo f,telephely, felhasznalougyintezo_telephely ftu WHERE f.aktiv = 1 AND telephely.ID = ? AND telephely.aktiv = 1 AND f.ID = ftu.felhasznalo_ID AND ftu.telephely_ID = ?
bind => [1, 1]
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.418--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, letrehozva, lockideje, tipus, tranzakcioskod, utoljaramod_mikor, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ugytipus WHERE (aktiv = ?)
bind => [true]
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.421--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT DISTINCT f.* FROM felhasznalo f,telephely, felhasznalougyintezo_telephely ftu WHERE f.aktiv = 1 AND telephely.ID = ? AND telephely.aktiv = 1 AND f.ID = ftu.felhasznalo_ID AND ftu.telephely_ID = ?
bind => [1, 1]
telephelyTelephely A
telephelyTelephely B
telephelyTelephely (törölt)
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.449--ClientSession(1062469667)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--UPDATE liquidator.felhasznalo SET bejelentkezes_telephelyId = ? WHERE (ID = ?)
bind => [1, 9999999]
[EL Fine]: 2014-01-21 17:36:11.45--ClientSession(1062469667)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--UPDATE liquidator.telephely_felszamolando SET tranzakcioskod = ?, utoljaramod_mikor = ?, utoljaramodositotta_felhasznalo_ID = ? WHERE (ID = ?)
bind => [8d7b4195-38f3-4ba6-ab13-2840de6291d4, 2014-01-21 17:36:11.384, 9999999, 1]
[EL Fine]: 2014-01-21 17:36:11.452--ClientSession(1062469667)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--UPDATE liquidator.telephely_felszamolando SET tranzakcioskod = ?, utoljaramod_mikor = ?, utoljaramodositotta_felhasznalo_ID = ? WHERE (ID = ?)
bind => [8d7b4195-38f3-4ba6-ab13-2840de6291d4, 2014-01-21 17:36:11.384, 9999999, 2]
[EL Fine]: 2014-01-21 17:36:11.453--ClientSession(1062469667)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--UPDATE liquidator.telephely_felszamolando SET tranzakcioskod = ?, utoljaramod_mikor = ?, utoljaramodositotta_felhasznalo_ID = ? WHERE (ID = ?)
bind => [8d7b4195-38f3-4ba6-ab13-2840de6291d4, 2014-01-21 17:36:11.384, 9999999, 3]
[EL Fine]: 2014-01-21 17:36:11.467--ClientSession(1062469667)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--UPDATE liquidator.ingosag SET tranzakcioskod = ?, utoljaramod_mikor = ?, utoljaramodositotta_felhasznalo_ID = ? WHERE (ID = ?)
bind => [8d7b4195-38f3-4ba6-ab13-2840de6291d4, 2014-01-21 17:36:11.384, 9999999, 1]
[EL Fine]: 2014-01-21 17:36:11.468--ClientSession(1062469667)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--UPDATE liquidator.ingosag SET tranzakcioskod = ?, utoljaramod_mikor = ?, utoljaramodositotta_felhasznalo_ID = ? WHERE (ID = ?)
bind => [8d7b4195-38f3-4ba6-ab13-2840de6291d4, 2014-01-21 17:36:11.384, 9999999, 2]
2014-01-21 17:36:11 INFO UgyController$UgyPersistor:978 - UgyEntity módosítása a DB-ben sikeres. UgyEntityID: 7
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.524--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, belsougyiratszam, elrendeles_doc_fajlnev, elrendeles_doc_memo, elrendeles_doc_mimetype, elrendeles_doc_tartalom, elrendeles_idopontja, elrendeles_ki, elrendeles_memo, felszamolando_ceg_adoszam, felszamolando_ceg_cegjegyzekszam, felszamolando_ceg_memo, felszamolando_ceg_rovidnev, felszamolando_ceg_teljesnev, kozzeteteldatuma, kulsougyiratszam, letrehozva, lockideje, memo, tranzakcioskod, utoljaramod_mikor, zarovegzesdatuma, elrendeles_felhasznalo_ID, ugy_felhasznalo_ID, felszamolando_ceg_cim_ID, telephely_ID, statusz_ID, ugytipus_ID, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ugy WHERE ((ID = ?) AND (aktiv = ?))
bind => [7, true]
2014-01-21 17:36:11 INFO UgyController$UgyPersistor:998 - Ügy egészének perzisztálása sikeres. UgyEntityID: 7
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.528--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, belsougyiratszam, elrendeles_doc_fajlnev, elrendeles_doc_memo, elrendeles_doc_mimetype, elrendeles_doc_tartalom, elrendeles_idopontja, elrendeles_ki, elrendeles_memo, felszamolando_ceg_adoszam, felszamolando_ceg_cegjegyzekszam, felszamolando_ceg_memo, felszamolando_ceg_rovidnev, felszamolando_ceg_teljesnev, kozzeteteldatuma, kulsougyiratszam, letrehozva, lockideje, memo, tranzakcioskod, utoljaramod_mikor, zarovegzesdatuma, elrendeles_felhasznalo_ID, ugy_felhasznalo_ID, felszamolando_ceg_cim_ID, telephely_ID, statusz_ID, ugytipus_ID, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ugy WHERE (aktiv = ?)
bind => [true]
2014-01-21 17:36:11 INFO EntityManagerUtil:46 - entityManager object name@hascode:org.eclipse.persistence.internal.jpa.EntityManagerImpl@6c3a9ce3
[EL Fine]: 2014-01-21 17:36:11.54--ServerSession(2071159129)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-19,5,main])--SELECT ID, aktiv, belsougyiratszam, elrendeles_doc_fajlnev, elrendeles_doc_memo, elrendeles_doc_mimetype, elrendeles_doc_tartalom, elrendeles_idopontja, elrendeles_ki, elrendeles_memo, felszamolando_ceg_adoszam, felszamolando_ceg_cegjegyzekszam, felszamolando_ceg_memo, felszamolando_ceg_rovidnev, felszamolando_ceg_teljesnev, kozzeteteldatuma, kulsougyiratszam, letrehozva, lockideje, memo, tranzakcioskod, utoljaramod_mikor, zarovegzesdatuma, elrendeles_felhasznalo_ID, ugy_felhasznalo_ID, felszamolando_ceg_cim_ID, telephely_ID, statusz_ID, ugytipus_ID, utoljaramodositotta_felhasznalo_ID, lockbyfelhasznalo_ID FROM liquidator.ugy WHERE ((ID = ?) AND (aktiv = ?))
bind => [7, true]
但是当我想保存/合并另一个实体(例如 ID 1303)时,插入很好地生成并执行:
[EL Fine]: 2014-01-21 17:38:19.391--ClientSession(1093415948)--Connection(264299847)--Thread(Thread[http-bio-8080-exec-22,5,main])--UPDATE liquidator.ugy SET felszamolando_ceg_teljesnev = ?, lockideje = ?, tranzakcioskod = ?, utoljaramod_mikor = ?, lockbyfelhasznalo_ID = ? WHERE (ID = ?)
bind => [akgalkgsafafsTESTESTUJUJ, null, 52254092-4954-441f-922c-8c5527b9dd9a, 2014-01-21 17:38:19.368, null, 1303]
使用新代码记录更新
2014-01-21 17:55:19 INFO UgyDAO:162 - -------BEFORE PERSIST: CASE ENTTIY COMAPNY NAME: NEW COMPANY NAME
[EL Fine]: 2014-01-21 17:55:19.19--ClientSession(1760590618)--Connection(392035700)--Thread(Thread[http-bio-8080-exec-46,5,main])--UPDATE liquidator.telephely_felszamolando SET tranzakcioskod = ?, utoljaramod_mikor = ? WHERE (ID = ?)
bind => [fe48707b-5064-49c5-81bf-d1f78cd93126, 2014-01-21 17:55:19.156, 1]
[EL Fine]: 2014-01-21 17:55:19.194--ClientSession(1760590618)--Connection(392035700)--Thread(Thread[http-bio-8080-exec-46,5,main])--UPDATE liquidator.telephely_felszamolando SET tranzakcioskod = ?, utoljaramod_mikor = ? WHERE (ID = ?)
bind => [fe48707b-5064-49c5-81bf-d1f78cd93126, 2014-01-21 17:55:19.156, 2]
[EL Fine]: 2014-01-21 17:55:19.197--ClientSession(1760590618)--Connection(392035700)--Thread(Thread[http-bio-8080-exec-46,5,main])--UPDATE liquidator.telephely_felszamolando SET tranzakcioskod = ?, utoljaramod_mikor = ? WHERE (ID = ?)
bind => [fe48707b-5064-49c5-81bf-d1f78cd93126, 2014-01-21 17:55:19.156, 3]
[EL Fine]: 2014-01-21 17:55:19.198--ClientSession(1760590618)--Connection(392035700)--Thread(Thread[http-bio-8080-exec-46,5,main])--UPDATE liquidator.ingosag SET tranzakcioskod = ?, utoljaramod_mikor = ? WHERE (ID = ?)
bind => [fe48707b-5064-49c5-81bf-d1f78cd93126, 2014-01-21 17:55:19.156, 1]
[EL Fine]: 2014-01-21 17:55:19.201--ClientSession(1760590618)--Connection(392035700)--Thread(Thread[http-bio-8080-exec-46,5,main])--UPDATE liquidator.ingosag SET tranzakcioskod = ?, utoljaramod_mikor = ? WHERE (ID = ?)
bind => [fe48707b-5064-49c5-81bf-d1f78cd93126, 2014-01-21 17:55:19.156, 2]
2014-01-21 17:55:19 INFO UgyDAO:168 - ---------AFTER PERSIST: CASE ENTTIY COMAPNY NAME: UJ TELJES NEV!