HHH-12965 Avoid creating foreign keys between audit and main tables
* Fixes a corner case not addressed by HHH-10667 * Avoids creating foreign-key constraints for any many-to-one
This commit is contained in:
parent
02089a5cce
commit
b28c7b0761
|
@ -311,9 +311,7 @@ public final class IdMetadataGenerator {
|
|||
// HHH-11107
|
||||
// Use FK hbm magic value 'none' to skip making foreign key constraints between the Envers
|
||||
// schema and the base table schema when a @ManyToOne is present in an identifier.
|
||||
if ( mapper == null ) {
|
||||
manyToOneElement.addAttribute( "foreign-key", "none" );
|
||||
}
|
||||
|
||||
MetadataTools.addColumns( manyToOneElement, value.getColumnIterator() );
|
||||
|
||||
|
|
|
@ -66,6 +66,48 @@ public class VirtualEntitySingleIdMapper extends SingleIdMapper {
|
|||
data.put( propertyData.getName(), entity );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mapToEntityFromEntity(Object objTo, Object objFrom) {
|
||||
if ( objTo == null || objFrom == null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
AccessController.doPrivileged(
|
||||
new PrivilegedAction<Object>() {
|
||||
@Override
|
||||
public Object run() {
|
||||
final Getter getter = ReflectionTools.getGetter(
|
||||
objFrom.getClass(),
|
||||
propertyData,
|
||||
getServiceRegistry()
|
||||
);
|
||||
|
||||
final Setter setter = ReflectionTools.getSetter(
|
||||
objTo.getClass(),
|
||||
propertyData,
|
||||
getServiceRegistry()
|
||||
);
|
||||
|
||||
// Get the value from the containing entity
|
||||
final Object value = getter.get( objFrom );
|
||||
if ( value == null ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ( !value.getClass().equals( propertyData.getVirtualReturnClass() ) ) {
|
||||
setter.set( objTo, getAssociatedEntityIdMapper().mapToIdFromEntity( value ), null );
|
||||
}
|
||||
else {
|
||||
// This means we're setting the object
|
||||
setter.set( objTo, value, null );
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mapToEntityFromMap(Object obj, Map data) {
|
||||
if ( data == null || obj == null ) {
|
||||
|
|
Loading…
Reference in New Issue