[ 
https://issues.apache.org/jira/browse/OPENJPA-1787?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13005059#comment-13005059
 ] 

Oliver Ringel commented on OPENJPA-1787:
----------------------------------------

Hi Michael,
thank you for your answer. I thought that it would not be so easy to solve this 
issue. Unfortunately.

I agree with you that the main problem here is that a copy action is missing 
and I guess AttachStrategy.persist is the right place to add some kind of copy 
functionality.

I started looking into the source code of the enhanced class from the test. 
PersistenceCapable declares a public method to copy fields (pcCopyFields(...)).
Unfortunately you can't use in AttachStrategy.persist, because the entity to 
persist has no statemanager at this point (an exception InvalidStateException 
will be the result).

My suggestion is to modify the class enhancement and remove the StateManager 
check in pcCopyFields (I don't see the need for this check). 
Afterwards you can use pcCopyFields in AttachStrategy.persist by adding 
something like 

   ...
        if (manager.getCopyNew()) {
            int[] fields = new int[meta.getFields().length];
            for (int i = 0; i < fields.length; i++)
                fields[i] = i;
            newInstance.pcCopyFields(pc, fields);
        }
   ...

This solution works for my testcase.

As an alternative you can modify (or add an additional) newInstance to copy the 
data.

I have no real experience with OpenJPA. Perhaps there is a much better solution.


> Bean validation fails merging a new entity
> ------------------------------------------
>
>                 Key: OPENJPA-1787
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-1787
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jpa, kernel
>    Affects Versions: 2.0.1, 2.1.0, 2.2.0
>            Reporter: Oliver Ringel
>            Priority: Critical
>         Attachments: com.example.TestEmployeeDAO.txt, openjpa-1787.tar, 
> testcase-openjpa-1787.tar
>
>
> The bean validation is not working correctly
> If you try to merge a new entity.
>         EntityManager em = entityManagerFactory.createEntityManager();
>         Person person = new Person();
>         person.setName("Oliver");                               // 
> Employee.name is annotated @NotNull 
>         person = em.merge(person);                            
> you get a ConstraintValidationException, although name is set. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to