You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Chadwick M Baatz (JIRA)" <ji...@apache.org> on 2007/10/02 20:47:50 UTC

[jira] Created: (OPENJPA-390) Implement an option for the Entity Manager to identify an entity based on an alternative key.

Implement an option for the Entity Manager to identify an entity based on an alternative key.
---------------------------------------------------------------------------------------------

                 Key: OPENJPA-390
                 URL: https://issues.apache.org/jira/browse/OPENJPA-390
             Project: OpenJPA
          Issue Type: Wish
          Components: jpa
         Environment: Any
            Reporter: Chadwick M Baatz
            Priority: Minor


Right now if one has used JPA to map entities in a service that accepts request to perform database storage the Entity Manager lacks the inherent capability to recognize duplicate entities based on alternative keys.  Since it often makes for a better database design to create an entity with both an id for relational mapping and an alternative key for uniqueness, it would save redundant DAO logic if the Entity Manager could perform this logic.  For example, let's say that there are two entities A and B where A owns and instance of B , each have a long id value, and each entity has a alternative key which is defined as a unique constraint.  In a application that receives random requests it is quite possible that two requests would arrive where either entity being passed into the entity manager is a duplicate of a managed entity.  Since most users of services neither know of or care about the id value at entity creation, it's assumed that the id value isn't set.  

Under this scenario a merge request to the EntityManager would result in a persist action, which would fail due to the unique constraint in the database.  It would be nice if there was some way to tell the Entity Manager to look at search an alternate key if the id value wasn't set and merge changes if a matching managed entity is found.  I have built a small framework for my own projects that looks at the named queries of an entity for a specific name, which if found is used to perform the ID look up.  This works well for finding and setting the id value for detached objects, but it gets a tad more complicated when a entity contains other entities.  I can think of another non-framework solution, which would be to create the table without an id column and use the alternative key as the primary key, but that has some drawbacks as well.  It seems to me like this is a condition that many users would come across and would have to either create broiler plate DAOs or their own frameworks to populate the id values on detached objects with alternative keys.  

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.