Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or .
*/
package org.hibernate.envers.internal.entities.mapper.id;
import java.io.Serializable;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Map;
import org.hibernate.Session;
import org.hibernate.envers.boot.internal.EnversService;
import org.hibernate.envers.internal.entities.PropertyData;
import org.hibernate.envers.internal.tools.ReflectionTools;
import org.hibernate.property.access.spi.Getter;
import org.hibernate.property.access.spi.Setter;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.type.EntityType;
/**
* An extension to the {@link SingleIdMapper} implementation that supports the use case of an {@code @IdClass}
* mapping that contains an entity association where the {@code @IdClass} stores the primary key of the
* associated entity rather than the entity object itself.
*
* Internally this mapper is capable of transforming the primary key values into the associated entity object
* and vice versa depending upon the operation.
*
* @author Chris Cranford
*/
public class VirtualEntitySingleIdMapper extends SingleIdMapper {
private final PropertyData propertyData;
private final String entityName;
private IdMapper entityIdMapper;
public VirtualEntitySingleIdMapper(ServiceRegistry serviceRegistry, PropertyData propertyData) {
super( serviceRegistry, propertyData );
this.propertyData = propertyData;
this.entityName = resolveEntityName( this.propertyData );
}
@Override
public void mapToMapFromId(Session session, Map data, Object obj) {
final Serializable value = AccessController.doPrivileged(
new PrivilegedAction() {
@Override
public Serializable run() {
final Getter getter = ReflectionTools.getGetter(
obj.getClass(),
propertyData,
getServiceRegistry()
);
return (Serializable) getter.get( obj );
}
}
);
// Either loads the entity from the session's 1LC if it already exists or potentially creates a
// proxy object to represent the entity by identifier so that we can reference it in the map.
final Object entity = session.load( this.entityName, value );
data.put( propertyData.getName(), entity );
}
@Override
public void mapToEntityFromEntity(Object objTo, Object objFrom) {
if ( objTo == null || objFrom == null ) {
return;
}
AccessController.doPrivileged(
new PrivilegedAction