我们觉得我们终于对我们在 neo4j-ogm 中看到的奇怪行为有了一个解释。我们最初认为它与 equals/hashcode 实现有关,但事实并非如此。
似乎 ogm 正在保留图形的缓存副本,并且在事务中所有检索都指向同一个内存对象。
我们创建了一个单元测试来演示该行为(下面是一些不起作用的伪代码)
//all within the same transactional
//retrieve an object from the database
NodeObject no1 = repository.loadObject();
//update some values on the object
no1.setValue("whatever");
//retrieve the same database object into a new java object
NodeObject no2 = repository.loadObject();
//at this point no2 and no1 are the same java object, and any value changes to no1 have been reverted to no2, as is in the database.
这对我们来说似乎是个问题。
我们之前已经观察到这一点,并通过更改检索到的对象的深度来消除它(以防止它们的图形恢复内存中的内容),但是当它不使用我们的密码查询时,可定制性较差。
请告诉我们如何避免这个问题!