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

If we will do locking somewhere else, I don't see the need of this method.

No, I don't think DynamoDB "assumes" identity of objects.  There is no equivalent of 'INSERT' in DynamoDB.  So either a new object is created or an existing one is replaced for the PutItem API.  The Java SDK wraps it up with an additional version attribute.  Let's say you want to save an object with the hash key "123", your new object will look like {"hash": 123, "version":  null}.  If there is no hash key 123 in DynamoDB yet, a new object is created with version 1 in DynamoDB {"hash": 123, "version": 1}.  Then if you try to create a new one using the same hash {"hash": 123, "version":  null}, it will fail because the version does not match. The nice thing about the version attribute is that it is designed for optimistic locking.  If you use it for optimistic locking, it will do the work for you.