@@ -2564,10 +2564,10 @@ public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode
2564
2564
2565
2565
private <T > IdentifierLoadAccessImpl <T > loadAccessWithOptions (Class <T > entityClass , FindOption [] options ) {
2566
2566
final IdentifierLoadAccessImpl <T > loadAccess = byId (entityClass );
2567
- CacheStoreMode storeMode = null ;
2568
- CacheRetrieveMode retrieveMode = null ;
2567
+ CacheStoreMode storeMode = getCacheStoreMode () ;
2568
+ CacheRetrieveMode retrieveMode = getCacheRetrieveMode () ;
2569
2569
LockOptions lockOptions = new LockOptions ();
2570
- for ( FindOption option : options ) {
2570
+ for ( FindOption option : options ) {
2571
2571
if ( option instanceof CacheStoreMode ) {
2572
2572
storeMode = (CacheStoreMode ) option ;
2573
2573
}
@@ -2591,7 +2591,7 @@ else if ( option instanceof Timeout ) {
2591
2591
lockOptions .setTimeOut ( timeout .milliseconds () );
2592
2592
}
2593
2593
else if ( option instanceof EnabledFetchProfile ) {
2594
- EnabledFetchProfile enabledFetchProfile = (EnabledFetchProfile ) option ;
2594
+ final EnabledFetchProfile enabledFetchProfile = (EnabledFetchProfile ) option ;
2595
2595
loadAccess .enableFetchProfile ( enabledFetchProfile .profileName () );
2596
2596
}
2597
2597
else if ( option instanceof ReadOnlyMode ) {
@@ -2717,8 +2717,17 @@ public void lock(Object entity, LockModeType lockModeType, Map<String, Object> p
2717
2717
2718
2718
@ Override
2719
2719
public void lock (Object entity , LockModeType lockMode , LockOption ... options ) {
2720
- // todo (jpa 3.2) : implement
2721
- throw new UnsupportedOperationException ( "Not yet implemented" );
2720
+ LockOptions lockOptions = new LockOptions ( LockModeTypeHelper .getLockMode (lockMode ) );
2721
+ for ( LockOption option : options ) {
2722
+ if ( option instanceof PessimisticLockScope ) {
2723
+ lockOptions .setLockScope ( (PessimisticLockScope ) option );
2724
+ }
2725
+ else if ( option instanceof Timeout ) {
2726
+ final Timeout timeout = (Timeout ) option ;
2727
+ lockOptions .setTimeOut ( timeout .milliseconds () );
2728
+ }
2729
+ }
2730
+ lock ( entity , lockOptions );
2722
2731
}
2723
2732
2724
2733
@ Override
@@ -2768,8 +2777,40 @@ public void refresh(Object entity, LockModeType lockModeType, Map<String, Object
2768
2777
2769
2778
@ Override
2770
2779
public void refresh (Object entity , RefreshOption ... options ) {
2771
- // todo (jpa 3.2) : implement
2772
- throw new UnsupportedOperationException ( "Not yet implemented" );
2780
+ CacheStoreMode storeMode = getCacheStoreMode ();
2781
+ LockOptions lockOptions = new LockOptions ();
2782
+ for ( RefreshOption option : options ) {
2783
+ if ( option instanceof CacheStoreMode ) {
2784
+ storeMode = (CacheStoreMode ) option ;
2785
+ }
2786
+ else if ( option instanceof LockModeType ) {
2787
+ lockOptions .setLockMode ( LockModeTypeHelper .getLockMode ( (LockModeType ) option ) );
2788
+ }
2789
+ else if ( option instanceof LockMode ) {
2790
+ lockOptions .setLockMode ( (LockMode ) option );
2791
+ }
2792
+ else if ( option instanceof LockOptions ) {
2793
+ lockOptions = (LockOptions ) option ;
2794
+ }
2795
+ else if ( option instanceof PessimisticLockScope ) {
2796
+ lockOptions .setLockScope ( (PessimisticLockScope ) option );
2797
+ }
2798
+ else if ( option instanceof Timeout ) {
2799
+ final Timeout timeout = (Timeout ) option ;
2800
+ lockOptions .setTimeOut ( timeout .milliseconds () );
2801
+ }
2802
+ }
2803
+
2804
+ final CacheMode previousCacheMode = getCacheMode ();
2805
+ if ( storeMode != null ) {
2806
+ setCacheStoreMode ( storeMode );
2807
+ }
2808
+ try {
2809
+ refresh ( entity , lockOptions );
2810
+ }
2811
+ finally {
2812
+ setCacheMode ( previousCacheMode );
2813
+ }
2773
2814
}
2774
2815
2775
2816
private LockOptions buildLockOptions (LockModeType lockModeType , Map <String , Object > properties ) {
0 commit comments