You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Jochen Kemnade (JIRA)" <ji...@apache.org> on 2014/11/06 10:39:34 UTC

[jira] [Updated] (TAP5-2389) [tapestry-jpa] Better EntityPersistentFieldStrategy that can persist transient entity

     [ https://issues.apache.org/jira/browse/TAP5-2389?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jochen Kemnade updated TAP5-2389:
---------------------------------
    Issue Type: Improvement  (was: Bug)

> [tapestry-jpa] Better EntityPersistentFieldStrategy that can persist transient entity
> -------------------------------------------------------------------------------------
>
>                 Key: TAP5-2389
>                 URL: https://issues.apache.org/jira/browse/TAP5-2389
>             Project: Tapestry 5
>          Issue Type: Improvement
>          Components: tapestry-jpa
>    Affects Versions: 5.4
>            Reporter: Charles Capon
>              Labels: jpa
>
> I'm using tapestry-jpa and I want to persist an entity that can be transient or not in a component.
> There is an issue with transient entities because they can not be persisted without an exception to be raised.
> Here is a code of a better EntityPersistentFieldStrategy that can persist transient and managed entity
> {code:title=EntityPersistentFieldStrategy.java|borderStyle=solid}
> public class EntityPersistentFieldStrategy extends AbstractSessionPersistentFieldStrategy {
>     private final static String PREFIX = "entity:";
>     private final EntityManagerManager entityManagerManager;
>     public EntityPersistentFieldStrategy(final EntityManagerManager entityManagerManager,
>             final Request request) {
>         super(PREFIX, request);
>         this.entityManagerManager = entityManagerManager;
>     }
>     @Override
>     protected Object convertApplicationValueToPersisted(final Object newValue) {
>         try {
>             return JpaInternalUtils.convertApplicationValueToPersisted(entityManagerManager,
>                     newValue);
>         } catch (final RuntimeException ex) {
>             return super.convertApplicationValueToPersisted(newValue);
>         }
>     }
>     @Override
>     protected Object convertPersistedToApplicationValue(final Object persistedValue) {
>         if (persistedValue instanceof PersistedEntity) {
>             final PersistedEntity persisted = (PersistedEntity) persistedValue;
>             return persisted.restore(entityManagerManager);
>         } else {
>             return super.convertPersistedToApplicationValue(persistedValue);
>         }
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)