HHH-8822 ValueHolder fields need to be transient if owned by a

Serializable class

Conflicts:
	hibernate-core/src/main/java/org/hibernate/metamodel/internal/MetadataImpl.java

Conflicts:
	hibernate-core/src/main/java/org/hibernate/engine/spi/TypedValue.java
This commit is contained in:
Brett Meyer 2014-01-30 11:54:31 -05:00
parent 856721507c
commit 1dcdc445b4
3 changed files with 5 additions and 2 deletions

View File

@ -47,6 +47,7 @@ public class NaturalIdCacheKey implements Serializable {
private final String entityName;
private final String tenantId;
private final int hashCode;
// "transient" is important here -- NaturalIdCacheKey needs to be Serializable
private transient ValueHolder<String> toString;
/**

View File

@ -27,6 +27,8 @@ package org.hibernate.internal.util;
* Represents a "final" value that is initialized either {@link #ValueHolder(Object) up front} or once at some point
* {@link #ValueHolder(ValueHolder.DeferredInitializer) after} declaration.
*
* Note: If a Serializable class has a {@link ValueHolder} property, that property should be declared transient!
*
* @author Steve Ebersole
*/
public class ValueHolder<T> {

View File

@ -86,8 +86,8 @@ public class MetadataImpl implements MetadataImplementor, Serializable {
private final ServiceRegistry serviceRegistry;
private final Options options;
private final ValueHolder<ClassLoaderService> classLoaderService;
private final ValueHolder<PersisterClassResolver> persisterClassResolverService;
private final transient ValueHolder<ClassLoaderService> classLoaderService;
private final transient ValueHolder<PersisterClassResolver> persisterClassResolverService;
private TypeResolver typeResolver = new TypeResolver();