Moving study models to study package; creating Dynamo Study and DAO

Not clear about the purpose of this method.  The moment you check if the identifier exists is not the same moment you set the identifier.  There is the possibility the id does not exist yet when you call this method. But when you decide to set it thinking it is unique, another thread or process has already set it for something else.  Unless you lock on the ID, calling this method does not avoid race conditions.

Without this method, you could just rely on the DynamoDB version attribute to do optimistic locking.  When you grab a new random ID, you set it right away, if the id has already existed in DynamoDB, you will get back a conflicting modification exception and you try another random ID until you get on without exceptions.  The locking on the version attribute guarantees that you are free of race conditions.