if (obj instanceof Instance) {\r
\r
Instance temp = (Instance)obj;\r
+ boolean thcycle;\r
+ boolean tmcycle;\r
if (this._urn != null) {\r
if (temp._urn == null) return false;\r
- else if (!(this._urn.equals(temp._urn))) \r
- return false;\r
- }\r
- else if (temp._urn != null)\r
+ if (this._urn != temp._urn) {\r
+ thcycle=org.castor.util.CycleBreaker.startingToCycle(this._urn);\r
+ tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._urn);\r
+ if (thcycle!=tmcycle) {\r
+ if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._urn); };\r
+ if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._urn); };\r
+ return false;\r
+ }\r
+ if (!thcycle) {\r
+ if (!this._urn.equals(temp._urn)) {\r
+ org.castor.util.CycleBreaker.releaseCycleHandle(this._urn);\r
+ org.castor.util.CycleBreaker.releaseCycleHandle(temp._urn);\r
+ return false;\r
+ }\r
+ org.castor.util.CycleBreaker.releaseCycleHandle(this._urn);\r
+ org.castor.util.CycleBreaker.releaseCycleHandle(temp._urn);\r
+ }\r
+ }\r
+ } else if (temp._urn != null)\r
return false;\r
return true;\r
}\r
int result = super.hashCode();\r
\r
long tmp;\r
- if (_urn != null) {\r
+ if (_urn != null\r
+ && !org.castor.util.CycleBreaker.startingToCycle(_urn)) {\r
result = 37 * result + _urn.hashCode();\r
+ org.castor.util.CycleBreaker.releaseCycleHandle(_urn);\r
}\r
\r
return result;\r