Thanks. It seems that there is nothing wrong with the change in build 2.7.3_03 (and 2.7.3_05), but apparently it exposes an existing problem, due to an additional new check.
It could be again related to class loading (maybe the Java 9.0 modules).
Your id type is StringIdentity.
Note that StringIdentity is defined in JDO to represent a combination of class + primary key and therefore it seems a bit strange to use it as the type of the id field. You should be able to change the id field to a simple String without database schema change, and save some space in memory. You can still use StringIdentity to represent object IDs externally when a combination of class + primary key is needed. This may solve the exception.
Anyway, StringIdentity as a primary key field type (although rarely used) seems to work, usually, as your application demonstrates. Unfortunately it seems that the following lines of code in ObjectDB fail:
memberObj = ((SingleFieldIdentity)memberObj).getKeyAsObject();
The parameter to the isAssignableFrom method is the type of your primary key field, i.e. StringIdentity, which is a subclass of SingleFieldIdentity. Unexpectedly, it seems that the expression in the if is evaluated to false, and an essential operation for primary key field of type StringIdentity is missed.
This could happen if more than one version of these JDO classes is used in the JVM, due to class loader mismatch.