HHH-5474 - Clean up usages of now deprecated ExtendedMappings
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@20136 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
74eb608be6
commit
f0f82e4f1b
|
@ -54,13 +54,15 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
|
||||||
private Map<String, JoinTable> holderJoinTableOverride;
|
private Map<String, JoinTable> holderJoinTableOverride;
|
||||||
private Map<String, JoinTable> currentPropertyJoinTableOverride;
|
private Map<String, JoinTable> currentPropertyJoinTableOverride;
|
||||||
private String path;
|
private String path;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private Boolean isInIdClass;
|
private Boolean isInIdClass;
|
||||||
|
|
||||||
|
|
||||||
public AbstractPropertyHolder(
|
public AbstractPropertyHolder(
|
||||||
String path, PropertyHolder parent, XClass clazzToProcess, ExtendedMappings mappings
|
String path,
|
||||||
) {
|
PropertyHolder parent,
|
||||||
|
XClass clazzToProcess,
|
||||||
|
Mappings mappings) {
|
||||||
this.path = path;
|
this.path = path;
|
||||||
this.parent = (AbstractPropertyHolder) parent;
|
this.parent = (AbstractPropertyHolder) parent;
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
|
@ -80,7 +82,7 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ExtendedMappings getMappings() {
|
protected Mappings getMappings() {
|
||||||
return mappings;
|
return mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,6 @@
|
||||||
* 51 Franklin Street, Fifth Floor
|
* 51 Franklin Street, Fifth Floor
|
||||||
* Boston, MA 02110-1301 USA
|
* Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.cfg;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
@ -203,7 +200,7 @@ public final class AnnotationBinder {
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger( AnnotationBinder.class );
|
private static final Logger log = LoggerFactory.getLogger( AnnotationBinder.class );
|
||||||
|
|
||||||
public static void bindDefaults(ExtendedMappings mappings) {
|
public static void bindDefaults(Mappings mappings) {
|
||||||
Map defaults = mappings.getReflectionManager().getDefaults();
|
Map defaults = mappings.getReflectionManager().getDefaults();
|
||||||
{
|
{
|
||||||
List<SequenceGenerator> anns = ( List<SequenceGenerator> ) defaults.get( SequenceGenerator.class );
|
List<SequenceGenerator> anns = ( List<SequenceGenerator> ) defaults.get( SequenceGenerator.class );
|
||||||
|
@ -253,7 +250,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindPackage(String packageName, ExtendedMappings mappings) {
|
public static void bindPackage(String packageName, Mappings mappings) {
|
||||||
XPackage pckg;
|
XPackage pckg;
|
||||||
try {
|
try {
|
||||||
pckg = mappings.getReflectionManager().packageForName( packageName );
|
pckg = mappings.getReflectionManager().packageForName( packageName );
|
||||||
|
@ -282,7 +279,7 @@ public final class AnnotationBinder {
|
||||||
BinderHelper.bindAnyMetaDefs( pckg, mappings );
|
BinderHelper.bindAnyMetaDefs( pckg, mappings );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindGenericGenerators(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
|
private static void bindGenericGenerators(XAnnotatedElement annotatedElement, Mappings mappings) {
|
||||||
GenericGenerator defAnn = annotatedElement.getAnnotation( GenericGenerator.class );
|
GenericGenerator defAnn = annotatedElement.getAnnotation( GenericGenerator.class );
|
||||||
GenericGenerators defsAnn = annotatedElement.getAnnotation( GenericGenerators.class );
|
GenericGenerators defsAnn = annotatedElement.getAnnotation( GenericGenerators.class );
|
||||||
if ( defAnn != null ) {
|
if ( defAnn != null ) {
|
||||||
|
@ -295,12 +292,12 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindGenericGenerator(GenericGenerator def, ExtendedMappings mappings) {
|
private static void bindGenericGenerator(GenericGenerator def, Mappings mappings) {
|
||||||
IdGenerator idGen = buildIdGenerator( def, mappings );
|
IdGenerator idGen = buildIdGenerator( def, mappings );
|
||||||
mappings.addGenerator( idGen );
|
mappings.addGenerator( idGen );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindQueries(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
|
private static void bindQueries(XAnnotatedElement annotatedElement, Mappings mappings) {
|
||||||
{
|
{
|
||||||
SqlResultSetMapping ann = annotatedElement.getAnnotation( SqlResultSetMapping.class );
|
SqlResultSetMapping ann = annotatedElement.getAnnotation( SqlResultSetMapping.class );
|
||||||
QueryBinder.bindSqlResultsetMapping( ann, mappings, false );
|
QueryBinder.bindSqlResultsetMapping( ann, mappings, false );
|
||||||
|
@ -355,7 +352,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IdGenerator buildIdGenerator(java.lang.annotation.Annotation ann, ExtendedMappings mappings) {
|
private static IdGenerator buildIdGenerator(java.lang.annotation.Annotation ann, Mappings mappings) {
|
||||||
IdGenerator idGen = new IdGenerator();
|
IdGenerator idGen = new IdGenerator();
|
||||||
if ( mappings.getSchemaName() != null ) {
|
if ( mappings.getSchemaName() != null ) {
|
||||||
idGen.addParam( PersistentIdentifierGenerator.SCHEMA, mappings.getSchemaName() );
|
idGen.addParam( PersistentIdentifierGenerator.SCHEMA, mappings.getSchemaName() );
|
||||||
|
@ -470,7 +467,7 @@ public final class AnnotationBinder {
|
||||||
if ( seqGen.initialValue() != 1 ) {
|
if ( seqGen.initialValue() != 1 ) {
|
||||||
log.warn(
|
log.warn(
|
||||||
"Hibernate does not support SequenceGenerator.initialValue() unless '{}' set",
|
"Hibernate does not support SequenceGenerator.initialValue() unless '{}' set",
|
||||||
AnnotationConfiguration.USE_NEW_ID_GENERATOR_MAPPINGS
|
Configuration.USE_NEW_ID_GENERATOR_MAPPINGS
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
idGen.addParam( SequenceHiLoGenerator.MAX_LO, String.valueOf( seqGen.allocationSize() - 1 ) );
|
idGen.addParam( SequenceHiLoGenerator.MAX_LO, String.valueOf( seqGen.allocationSize() - 1 ) );
|
||||||
|
@ -503,8 +500,9 @@ public final class AnnotationBinder {
|
||||||
* @throws MappingException in case there is an configuration error
|
* @throws MappingException in case there is an configuration error
|
||||||
*/
|
*/
|
||||||
public static void bindClass(
|
public static void bindClass(
|
||||||
XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass, ExtendedMappings mappings
|
XClass clazzToProcess,
|
||||||
) throws MappingException {
|
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
||||||
|
Mappings mappings) throws MappingException {
|
||||||
//@Entity and @MappedSuperclass on the same class leads to a NPE down the road
|
//@Entity and @MappedSuperclass on the same class leads to a NPE down the road
|
||||||
if ( clazzToProcess.isAnnotationPresent( Entity.class )
|
if ( clazzToProcess.isAnnotationPresent( Entity.class )
|
||||||
&& clazzToProcess.isAnnotationPresent( MappedSuperclass.class ) ) {
|
&& clazzToProcess.isAnnotationPresent( MappedSuperclass.class ) ) {
|
||||||
|
@ -763,7 +761,16 @@ public final class AnnotationBinder {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void processIdPropertiesIfNotAlready(Map<XClass, InheritanceState> inheritanceStatePerClass, ExtendedMappings mappings, PersistentClass persistentClass, EntityBinder entityBinder, PropertyHolder propertyHolder, HashMap<String, IdGenerator> classGenerators, InheritanceState.ElementsToProcess elementsToProcess, boolean subclassAndSingleTableStrategy, Set<String> idPropertiesIfIdClass) {
|
private static void processIdPropertiesIfNotAlready(
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
||||||
|
Mappings mappings,
|
||||||
|
PersistentClass persistentClass,
|
||||||
|
EntityBinder entityBinder,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
HashMap<String, IdGenerator> classGenerators,
|
||||||
|
InheritanceState.ElementsToProcess elementsToProcess,
|
||||||
|
boolean subclassAndSingleTableStrategy,
|
||||||
|
Set<String> idPropertiesIfIdClass) {
|
||||||
Set<String> missingIdProperties = new HashSet<String>( idPropertiesIfIdClass );
|
Set<String> missingIdProperties = new HashSet<String>( idPropertiesIfIdClass );
|
||||||
for ( PropertyData propertyAnnotatedElement : elementsToProcess.getElements() ) {
|
for ( PropertyData propertyAnnotatedElement : elementsToProcess.getElements() ) {
|
||||||
String propertyName = propertyAnnotatedElement.getPropertyName();
|
String propertyName = propertyAnnotatedElement.getPropertyName();
|
||||||
|
@ -795,7 +802,15 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean mapAsIdClass(Map<XClass, InheritanceState> inheritanceStatePerClass, InheritanceState inheritanceState, PersistentClass persistentClass, EntityBinder entityBinder, PropertyHolder propertyHolder, InheritanceState.ElementsToProcess elementsToProcess, Set<String> idPropertiesIfIdClass, ExtendedMappings mappings) {
|
private static boolean mapAsIdClass(
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
||||||
|
InheritanceState inheritanceState,
|
||||||
|
PersistentClass persistentClass,
|
||||||
|
EntityBinder entityBinder,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
InheritanceState.ElementsToProcess elementsToProcess,
|
||||||
|
Set<String> idPropertiesIfIdClass,
|
||||||
|
Mappings mappings) {
|
||||||
/*
|
/*
|
||||||
* We are looking for @IdClass
|
* We are looking for @IdClass
|
||||||
* In general we map the id class as identifier using the mapping metadata of the main entity's properties
|
* In general we map the id class as identifier using the mapping metadata of the main entity's properties
|
||||||
|
@ -916,7 +931,7 @@ public final class AnnotationBinder {
|
||||||
PropertyData baseInferredData,
|
PropertyData baseInferredData,
|
||||||
AccessType propertyAccessor,
|
AccessType propertyAccessor,
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
if ( elementsToProcess.getIdPropertyCount() == 1 ) {
|
if ( elementsToProcess.getIdPropertyCount() == 1 ) {
|
||||||
final PropertyData idPropertyOnBaseClass = getUniqueIdPropertyFromBaseClass(
|
final PropertyData idPropertyOnBaseClass = getUniqueIdPropertyFromBaseClass(
|
||||||
inferredData, baseInferredData, propertyAccessor, mappings
|
inferredData, baseInferredData, propertyAccessor, mappings
|
||||||
|
@ -946,7 +961,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Cache determineCacheSettings(XClass clazzToProcess, ExtendedMappings mappings) {
|
private static Cache determineCacheSettings(XClass clazzToProcess, Mappings mappings) {
|
||||||
Cache cacheAnn = clazzToProcess.getAnnotation( Cache.class );
|
Cache cacheAnn = clazzToProcess.getAnnotation( Cache.class );
|
||||||
if ( cacheAnn != null ) {
|
if ( cacheAnn != null ) {
|
||||||
return cacheAnn;
|
return cacheAnn;
|
||||||
|
@ -979,7 +994,7 @@ public final class AnnotationBinder {
|
||||||
return cacheAnn;
|
return cacheAnn;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SharedCacheMode determineSharedCacheMode(ExtendedMappings mappings) {
|
private static SharedCacheMode determineSharedCacheMode(Mappings mappings) {
|
||||||
SharedCacheMode mode;
|
SharedCacheMode mode;
|
||||||
final Object value = mappings.getConfigurationProperties().get( "javax.persistence.sharedCache.mode" );
|
final Object value = mappings.getConfigurationProperties().get( "javax.persistence.sharedCache.mode" );
|
||||||
if ( value == null ) {
|
if ( value == null ) {
|
||||||
|
@ -1006,7 +1021,7 @@ public final class AnnotationBinder {
|
||||||
return mode;
|
return mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Cache buildCacheMock(String region, ExtendedMappings mappings) {
|
private static Cache buildCacheMock(String region, Mappings mappings) {
|
||||||
return new LocalCacheAnnotationImpl( region, determineCacheConcurrencyStrategy( mappings ) );
|
return new LocalCacheAnnotationImpl( region, determineCacheConcurrencyStrategy( mappings ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1018,12 +1033,12 @@ public final class AnnotationBinder {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !properties.containsKey( AnnotationConfiguration.DEFAULT_CACHE_CONCURRENCY_STRATEGY ) ) {
|
if ( !properties.containsKey( Configuration.DEFAULT_CACHE_CONCURRENCY_STRATEGY ) ) {
|
||||||
log.trace( "Given properties did not contain any default cache concurrency strategy setting" );
|
log.trace( "Given properties did not contain any default cache concurrency strategy setting" );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final String strategyName = properties.getProperty( AnnotationConfiguration.DEFAULT_CACHE_CONCURRENCY_STRATEGY );
|
final String strategyName = properties.getProperty( Configuration.DEFAULT_CACHE_CONCURRENCY_STRATEGY );
|
||||||
log.trace( "Discovered default cache concurrency strategy via config [" + strategyName + "]" );
|
log.trace( "Discovered default cache concurrency strategy via config [" + strategyName + "]" );
|
||||||
CacheConcurrencyStrategy strategy = CacheConcurrencyStrategy.parse( strategyName );
|
CacheConcurrencyStrategy strategy = CacheConcurrencyStrategy.parse( strategyName );
|
||||||
if ( strategy == null ) {
|
if ( strategy == null ) {
|
||||||
|
@ -1035,7 +1050,7 @@ public final class AnnotationBinder {
|
||||||
DEFAULT_CACHE_CONCURRENCY_STRATEGY = strategy;
|
DEFAULT_CACHE_CONCURRENCY_STRATEGY = strategy;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static CacheConcurrencyStrategy determineCacheConcurrencyStrategy(ExtendedMappings mappings) {
|
private static CacheConcurrencyStrategy determineCacheConcurrencyStrategy(Mappings mappings) {
|
||||||
if ( DEFAULT_CACHE_CONCURRENCY_STRATEGY == null ) {
|
if ( DEFAULT_CACHE_CONCURRENCY_STRATEGY == null ) {
|
||||||
final RegionFactory cacheRegionFactory = SettingsFactory.createRegionFactory(
|
final RegionFactory cacheRegionFactory = SettingsFactory.createRegionFactory(
|
||||||
mappings.getConfigurationProperties(), true
|
mappings.getConfigurationProperties(), true
|
||||||
|
@ -1094,7 +1109,11 @@ public final class AnnotationBinder {
|
||||||
return persistentClass;
|
return persistentClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Ejb3JoinColumn[] makeInheritanceJoinColumns(XClass clazzToProcess, ExtendedMappings mappings, InheritanceState inheritanceState, PersistentClass superEntity) {
|
private static Ejb3JoinColumn[] makeInheritanceJoinColumns(
|
||||||
|
XClass clazzToProcess,
|
||||||
|
Mappings mappings,
|
||||||
|
InheritanceState inheritanceState,
|
||||||
|
PersistentClass superEntity) {
|
||||||
Ejb3JoinColumn[] inheritanceJoinedColumns = null;
|
Ejb3JoinColumn[] inheritanceJoinedColumns = null;
|
||||||
final boolean hasJoinedColumns = inheritanceState.hasParents()
|
final boolean hasJoinedColumns = inheritanceState.hasParents()
|
||||||
&& InheritanceType.JOINED.equals( inheritanceState.getType() );
|
&& InheritanceType.JOINED.equals( inheritanceState.getType() );
|
||||||
|
@ -1133,7 +1152,7 @@ public final class AnnotationBinder {
|
||||||
return inheritanceJoinedColumns;
|
return inheritanceJoinedColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static PersistentClass getSuperEntity(XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass, ExtendedMappings mappings, InheritanceState inheritanceState) {
|
private static PersistentClass getSuperEntity(XClass clazzToProcess, Map<XClass, InheritanceState> inheritanceStatePerClass, Mappings mappings, InheritanceState inheritanceState) {
|
||||||
InheritanceState superEntityState = InheritanceState.getInheritanceStateOfSuperEntity(
|
InheritanceState superEntityState = InheritanceState.getInheritanceStateOfSuperEntity(
|
||||||
clazzToProcess, inheritanceStatePerClass
|
clazzToProcess, inheritanceStatePerClass
|
||||||
);
|
);
|
||||||
|
@ -1185,7 +1204,7 @@ public final class AnnotationBinder {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private static void bindFilters(XClass annotatedClass, EntityBinder entityBinder,
|
private static void bindFilters(XClass annotatedClass, EntityBinder entityBinder,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
|
|
||||||
bindFilters( annotatedClass, entityBinder );
|
bindFilters( annotatedClass, entityBinder );
|
||||||
|
|
||||||
|
@ -1215,7 +1234,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindFilterDefs(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
|
private static void bindFilterDefs(XAnnotatedElement annotatedElement, Mappings mappings) {
|
||||||
FilterDef defAnn = annotatedElement.getAnnotation( FilterDef.class );
|
FilterDef defAnn = annotatedElement.getAnnotation( FilterDef.class );
|
||||||
FilterDefs defsAnn = annotatedElement.getAnnotation( FilterDefs.class );
|
FilterDefs defsAnn = annotatedElement.getAnnotation( FilterDefs.class );
|
||||||
if ( defAnn != null ) {
|
if ( defAnn != null ) {
|
||||||
|
@ -1228,7 +1247,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindFilterDef(FilterDef defAnn, ExtendedMappings mappings) {
|
private static void bindFilterDef(FilterDef defAnn, Mappings mappings) {
|
||||||
Map<String, org.hibernate.type.Type> params = new HashMap<String, org.hibernate.type.Type>();
|
Map<String, org.hibernate.type.Type> params = new HashMap<String, org.hibernate.type.Type>();
|
||||||
for ( ParamDef param : defAnn.parameters() ) {
|
for ( ParamDef param : defAnn.parameters() ) {
|
||||||
params.put( param.name(), mappings.getTypeResolver().heuristicType( param.type() ) );
|
params.put( param.name(), mappings.getTypeResolver().heuristicType( param.type() ) );
|
||||||
|
@ -1238,7 +1257,7 @@ public final class AnnotationBinder {
|
||||||
mappings.addFilterDefinition( def );
|
mappings.addFilterDefinition( def );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindTypeDefs(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
|
private static void bindTypeDefs(XAnnotatedElement annotatedElement, Mappings mappings) {
|
||||||
TypeDef defAnn = annotatedElement.getAnnotation( TypeDef.class );
|
TypeDef defAnn = annotatedElement.getAnnotation( TypeDef.class );
|
||||||
TypeDefs defsAnn = annotatedElement.getAnnotation( TypeDefs.class );
|
TypeDefs defsAnn = annotatedElement.getAnnotation( TypeDefs.class );
|
||||||
if ( defAnn != null ) {
|
if ( defAnn != null ) {
|
||||||
|
@ -1251,7 +1270,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindFetchProfiles(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
|
private static void bindFetchProfiles(XAnnotatedElement annotatedElement, Mappings mappings) {
|
||||||
FetchProfile fetchProfileAnnotation = annotatedElement.getAnnotation( FetchProfile.class );
|
FetchProfile fetchProfileAnnotation = annotatedElement.getAnnotation( FetchProfile.class );
|
||||||
FetchProfiles fetchProfileAnnotations = annotatedElement.getAnnotation( FetchProfiles.class );
|
FetchProfiles fetchProfileAnnotations = annotatedElement.getAnnotation( FetchProfiles.class );
|
||||||
if ( fetchProfileAnnotation != null ) {
|
if ( fetchProfileAnnotation != null ) {
|
||||||
|
@ -1264,7 +1283,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindFetchProfile(FetchProfile fetchProfileAnnotation, ExtendedMappings mappings) {
|
private static void bindFetchProfile(FetchProfile fetchProfileAnnotation, Mappings mappings) {
|
||||||
for ( FetchProfile.FetchOverride fetch : fetchProfileAnnotation.fetchOverrides() ) {
|
for ( FetchProfile.FetchOverride fetch : fetchProfileAnnotation.fetchOverrides() ) {
|
||||||
org.hibernate.annotations.FetchMode mode = fetch.mode();
|
org.hibernate.annotations.FetchMode mode = fetch.mode();
|
||||||
if ( !mode.equals( org.hibernate.annotations.FetchMode.JOIN ) ) {
|
if ( !mode.equals( org.hibernate.annotations.FetchMode.JOIN ) ) {
|
||||||
|
@ -1276,7 +1295,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindTypeDef(TypeDef defAnn, ExtendedMappings mappings) {
|
private static void bindTypeDef(TypeDef defAnn, Mappings mappings) {
|
||||||
Properties params = new Properties();
|
Properties params = new Properties();
|
||||||
for ( Parameter param : defAnn.parameters() ) {
|
for ( Parameter param : defAnn.parameters() ) {
|
||||||
params.setProperty( param.name(), param.value() );
|
params.setProperty( param.name(), param.value() );
|
||||||
|
@ -1306,7 +1325,7 @@ public final class AnnotationBinder {
|
||||||
Ejb3DiscriminatorColumn discriminatorColumn,
|
Ejb3DiscriminatorColumn discriminatorColumn,
|
||||||
Map<String, Join> secondaryTables,
|
Map<String, Join> secondaryTables,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
if ( rootClass.getDiscriminator() == null ) {
|
if ( rootClass.getDiscriminator() == null ) {
|
||||||
if ( discriminatorColumn == null ) {
|
if ( discriminatorColumn == null ) {
|
||||||
throw new AssertionFailure( "discriminator column should have been built" );
|
throw new AssertionFailure( "discriminator column should have been built" );
|
||||||
|
@ -1333,8 +1352,10 @@ public final class AnnotationBinder {
|
||||||
* the determined access strategy, {@code false} otherwise.
|
* the determined access strategy, {@code false} otherwise.
|
||||||
*/
|
*/
|
||||||
static int addElementsOfClass(
|
static int addElementsOfClass(
|
||||||
List<PropertyData> elements, AccessType defaultAccessType, PropertyContainer propertyContainer, ExtendedMappings mappings
|
List<PropertyData> elements,
|
||||||
) {
|
AccessType defaultAccessType,
|
||||||
|
PropertyContainer propertyContainer,
|
||||||
|
Mappings mappings) {
|
||||||
int idPropertyCounter = 0;
|
int idPropertyCounter = 0;
|
||||||
AccessType accessType = defaultAccessType;
|
AccessType accessType = defaultAccessType;
|
||||||
|
|
||||||
|
@ -1353,9 +1374,11 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int addProperty(
|
private static int addProperty(
|
||||||
PropertyContainer propertyContainer, XProperty property, List<PropertyData> annElts,
|
PropertyContainer propertyContainer,
|
||||||
String propertyAccessor, ExtendedMappings mappings
|
XProperty property,
|
||||||
) {
|
List<PropertyData> annElts,
|
||||||
|
String propertyAccessor,
|
||||||
|
Mappings mappings) {
|
||||||
final XClass declaringClass = propertyContainer.getDeclaringClass();
|
final XClass declaringClass = propertyContainer.getDeclaringClass();
|
||||||
final XClass entity = propertyContainer.getEntityAtStake();
|
final XClass entity = propertyContainer.getEntityAtStake();
|
||||||
int idPropertyCounter = 0;
|
int idPropertyCounter = 0;
|
||||||
|
@ -1391,12 +1414,16 @@ public final class AnnotationBinder {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private static void processElementAnnotations(
|
private static void processElementAnnotations(
|
||||||
PropertyHolder propertyHolder, Nullability nullability,
|
PropertyHolder propertyHolder,
|
||||||
PropertyData inferredData, HashMap<String, IdGenerator> classGenerators,
|
Nullability nullability,
|
||||||
EntityBinder entityBinder, boolean isIdentifierMapper,
|
PropertyData inferredData,
|
||||||
boolean isComponentEmbedded, boolean inSecondPass, ExtendedMappings mappings,
|
HashMap<String, IdGenerator> classGenerators,
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass
|
EntityBinder entityBinder,
|
||||||
) throws MappingException {
|
boolean isIdentifierMapper,
|
||||||
|
boolean isComponentEmbedded,
|
||||||
|
boolean inSecondPass,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass) throws MappingException {
|
||||||
/**
|
/**
|
||||||
* inSecondPass can only be used to apply right away the second pass of a composite-element
|
* inSecondPass can only be used to apply right away the second pass of a composite-element
|
||||||
* Because it's a value type, there is no bidirectional association, hence second pass
|
* Because it's a value type, there is no bidirectional association, hence second pass
|
||||||
|
@ -2065,7 +2092,7 @@ public final class AnnotationBinder {
|
||||||
SimpleValue idValue,
|
SimpleValue idValue,
|
||||||
HashMap<String, IdGenerator> classGenerators,
|
HashMap<String, IdGenerator> classGenerators,
|
||||||
boolean isIdentifierMapper,
|
boolean isIdentifierMapper,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
if ( isIdentifierMapper ) {
|
if ( isIdentifierMapper ) {
|
||||||
throw new AnnotationException(
|
throw new AnnotationException(
|
||||||
"@IdClass class should not have @Id nor @EmbeddedId properties: "
|
"@IdClass class should not have @Id nor @EmbeddedId properties: "
|
||||||
|
@ -2103,10 +2130,13 @@ public final class AnnotationBinder {
|
||||||
//TODO move that to collection binder?
|
//TODO move that to collection binder?
|
||||||
|
|
||||||
private static void bindJoinedTableAssociation(
|
private static void bindJoinedTableAssociation(
|
||||||
XProperty property, ExtendedMappings mappings, EntityBinder entityBinder,
|
XProperty property,
|
||||||
CollectionBinder collectionBinder, PropertyHolder propertyHolder, PropertyData inferredData,
|
Mappings mappings,
|
||||||
String mappedBy
|
EntityBinder entityBinder,
|
||||||
) {
|
CollectionBinder collectionBinder,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
String mappedBy) {
|
||||||
TableBinder associationTableBinder = new TableBinder();
|
TableBinder associationTableBinder = new TableBinder();
|
||||||
JoinColumn[] annJoins;
|
JoinColumn[] annJoins;
|
||||||
JoinColumn[] annInverseJoins;
|
JoinColumn[] annInverseJoins;
|
||||||
|
@ -2181,7 +2211,7 @@ public final class AnnotationBinder {
|
||||||
AccessType propertyAccessor,
|
AccessType propertyAccessor,
|
||||||
EntityBinder entityBinder,
|
EntityBinder entityBinder,
|
||||||
boolean isIdentifierMapper,
|
boolean isIdentifierMapper,
|
||||||
ExtendedMappings mappings,
|
Mappings mappings,
|
||||||
boolean isComponentEmbedded,
|
boolean isComponentEmbedded,
|
||||||
boolean isId, //is a identifier
|
boolean isId, //is a identifier
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
||||||
|
@ -2240,13 +2270,16 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Component fillComponent(
|
public static Component fillComponent(
|
||||||
PropertyHolder propertyHolder, PropertyData inferredData,
|
PropertyHolder propertyHolder,
|
||||||
AccessType propertyAccessor, boolean isNullable,
|
PropertyData inferredData,
|
||||||
|
AccessType propertyAccessor,
|
||||||
|
boolean isNullable,
|
||||||
EntityBinder entityBinder,
|
EntityBinder entityBinder,
|
||||||
boolean isComponentEmbedded, boolean isIdentifierMapper, boolean inSecondPass,
|
boolean isComponentEmbedded,
|
||||||
ExtendedMappings mappings, Map<XClass, InheritanceState> inheritanceStatePerClass
|
boolean isIdentifierMapper,
|
||||||
) {
|
boolean inSecondPass,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
return fillComponent(
|
return fillComponent(
|
||||||
propertyHolder, inferredData, null, propertyAccessor,
|
propertyHolder, inferredData, null, propertyAccessor,
|
||||||
isNullable, entityBinder, isComponentEmbedded, isIdentifierMapper, inSecondPass, mappings,
|
isNullable, entityBinder, isComponentEmbedded, isIdentifierMapper, inSecondPass, mappings,
|
||||||
|
@ -2255,13 +2288,17 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Component fillComponent(
|
public static Component fillComponent(
|
||||||
PropertyHolder propertyHolder, PropertyData inferredData,
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
PropertyData baseInferredData, //base inferred data correspond to the entity reproducing inferredData's properties (ie IdClass)
|
PropertyData baseInferredData, //base inferred data correspond to the entity reproducing inferredData's properties (ie IdClass)
|
||||||
AccessType propertyAccessor, boolean isNullable, EntityBinder entityBinder,
|
AccessType propertyAccessor,
|
||||||
boolean isComponentEmbedded, boolean isIdentifierMapper, boolean inSecondPass, ExtendedMappings mappings,
|
boolean isNullable,
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass
|
EntityBinder entityBinder,
|
||||||
) {
|
boolean isComponentEmbedded,
|
||||||
|
boolean isIdentifierMapper,
|
||||||
|
boolean inSecondPass,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
/**
|
/**
|
||||||
* inSecondPass can only be used to apply right away the second pass of a composite-element
|
* inSecondPass can only be used to apply right away the second pass of a composite-element
|
||||||
* Because it's a value type, there is no bidirectional association, hence second pass
|
* Because it's a value type, there is no bidirectional association, hence second pass
|
||||||
|
@ -2380,7 +2417,7 @@ public final class AnnotationBinder {
|
||||||
PropertyData inferredData,
|
PropertyData inferredData,
|
||||||
boolean isComponentEmbedded,
|
boolean isComponentEmbedded,
|
||||||
boolean isIdentifierMapper,
|
boolean isIdentifierMapper,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
Component comp = new Component( mappings, propertyHolder.getPersistentClass() );
|
Component comp = new Component( mappings, propertyHolder.getPersistentClass() );
|
||||||
comp.setEmbedded( isComponentEmbedded );
|
comp.setEmbedded( isComponentEmbedded );
|
||||||
//yuk
|
//yuk
|
||||||
|
@ -2397,13 +2434,19 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindIdClass(
|
private static void bindIdClass(
|
||||||
String generatorType, String generatorName, PropertyData inferredData,
|
String generatorType,
|
||||||
PropertyData baseInferredData, Ejb3Column[] columns, PropertyHolder propertyHolder,
|
String generatorName,
|
||||||
|
PropertyData inferredData,
|
||||||
|
PropertyData baseInferredData,
|
||||||
|
Ejb3Column[] columns,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
boolean isComposite,
|
boolean isComposite,
|
||||||
AccessType propertyAccessor, EntityBinder entityBinder, boolean isEmbedded,
|
AccessType propertyAccessor,
|
||||||
boolean isIdentifierMapper, ExtendedMappings mappings,
|
EntityBinder entityBinder,
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass
|
boolean isEmbedded,
|
||||||
) {
|
boolean isIdentifierMapper,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fill simple value and property since and Id is a property
|
* Fill simple value and property since and Id is a property
|
||||||
|
@ -2485,7 +2528,7 @@ public final class AnnotationBinder {
|
||||||
PropertyData inferredData,
|
PropertyData inferredData,
|
||||||
PropertyData baseInferredData,
|
PropertyData baseInferredData,
|
||||||
AccessType propertyAccessor,
|
AccessType propertyAccessor,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
List<PropertyData> baseClassElements = new ArrayList<PropertyData>();
|
List<PropertyData> baseClassElements = new ArrayList<PropertyData>();
|
||||||
XClass baseReturnedClassOrElement = baseInferredData.getClassOrElement();
|
XClass baseReturnedClassOrElement = baseInferredData.getClassOrElement();
|
||||||
PropertyContainer propContainer = new PropertyContainer(
|
PropertyContainer propContainer = new PropertyContainer(
|
||||||
|
@ -2514,14 +2557,19 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindManyToOne(
|
private static void bindManyToOne(
|
||||||
String cascadeStrategy, Ejb3JoinColumn[] columns, boolean optional,
|
String cascadeStrategy,
|
||||||
boolean ignoreNotFound, boolean cascadeOnDelete,
|
Ejb3JoinColumn[] columns,
|
||||||
XClass targetEntity, PropertyHolder propertyHolder,
|
boolean optional,
|
||||||
PropertyData inferredData, boolean unique,
|
boolean ignoreNotFound,
|
||||||
boolean isIdentifierMapper, boolean inSecondPass,
|
boolean cascadeOnDelete,
|
||||||
|
XClass targetEntity,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
boolean unique,
|
||||||
|
boolean isIdentifierMapper,
|
||||||
|
boolean inSecondPass,
|
||||||
PropertyBinder propertyBinder,
|
PropertyBinder propertyBinder,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
//All FK columns should be in the same table
|
//All FK columns should be in the same table
|
||||||
org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( mappings, columns[0].getTable() );
|
org.hibernate.mapping.ManyToOne value = new org.hibernate.mapping.ManyToOne( mappings, columns[0].getTable() );
|
||||||
// This is a @OneToOne mapped to a physical o.h.mapping.ManyToOne
|
// This is a @OneToOne mapped to a physical o.h.mapping.ManyToOne
|
||||||
|
@ -2655,8 +2703,7 @@ public final class AnnotationBinder {
|
||||||
boolean isIdentifierMapper,
|
boolean isIdentifierMapper,
|
||||||
boolean inSecondPass,
|
boolean inSecondPass,
|
||||||
PropertyBinder propertyBinder,
|
PropertyBinder propertyBinder,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
//column.getTable() => persistentClass.getTable()
|
//column.getTable() => persistentClass.getTable()
|
||||||
final String propertyName = inferredData.getPropertyName();
|
final String propertyName = inferredData.getPropertyName();
|
||||||
log.trace( "Fetching {} with {}", propertyName, fetchMode );
|
log.trace( "Fetching {} with {}", propertyName, fetchMode );
|
||||||
|
@ -2721,10 +2768,15 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindAny(
|
private static void bindAny(
|
||||||
String cascadeStrategy, Ejb3JoinColumn[] columns, boolean cascadeOnDelete, Nullability nullability,
|
String cascadeStrategy,
|
||||||
PropertyHolder propertyHolder, PropertyData inferredData, EntityBinder entityBinder,
|
Ejb3JoinColumn[] columns,
|
||||||
boolean isIdentifierMapper, ExtendedMappings mappings
|
boolean cascadeOnDelete,
|
||||||
) {
|
Nullability nullability,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
EntityBinder entityBinder,
|
||||||
|
boolean isIdentifierMapper,
|
||||||
|
Mappings mappings) {
|
||||||
org.hibernate.annotations.Any anyAnn = inferredData.getProperty()
|
org.hibernate.annotations.Any anyAnn = inferredData.getProperty()
|
||||||
.getAnnotation( org.hibernate.annotations.Any.class );
|
.getAnnotation( org.hibernate.annotations.Any.class );
|
||||||
if ( anyAnn == null ) {
|
if ( anyAnn == null ) {
|
||||||
|
@ -2759,7 +2811,7 @@ public final class AnnotationBinder {
|
||||||
propertyHolder.addProperty( prop, columns, inferredData.getDeclaringClass() );
|
propertyHolder.addProperty( prop, columns, inferredData.getDeclaringClass() );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String generatorType(GenerationType generatorEnum, ExtendedMappings mappings) {
|
private static String generatorType(GenerationType generatorEnum, Mappings mappings) {
|
||||||
boolean useNewGeneratorMappings = mappings.useNewGeneratorMappings();
|
boolean useNewGeneratorMappings = mappings.useNewGeneratorMappings();
|
||||||
switch ( generatorEnum ) {
|
switch ( generatorEnum ) {
|
||||||
case IDENTITY:
|
case IDENTITY:
|
||||||
|
@ -2811,8 +2863,10 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getCascadeStrategy(
|
private static String getCascadeStrategy(
|
||||||
javax.persistence.CascadeType[] ejbCascades, Cascade hibernateCascadeAnnotation,
|
javax.persistence.CascadeType[] ejbCascades,
|
||||||
boolean orphanRemoval, boolean forcePersist) {
|
Cascade hibernateCascadeAnnotation,
|
||||||
|
boolean orphanRemoval,
|
||||||
|
boolean forcePersist) {
|
||||||
EnumSet<CascadeType> hibernateCascadeSet = convertToHibernateCascadeType( ejbCascades );
|
EnumSet<CascadeType> hibernateCascadeSet = convertToHibernateCascadeType( ejbCascades );
|
||||||
CascadeType[] hibernateCascades = hibernateCascadeAnnotation == null ?
|
CascadeType[] hibernateCascades = hibernateCascadeAnnotation == null ?
|
||||||
null :
|
null :
|
||||||
|
@ -2883,7 +2937,7 @@ public final class AnnotationBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HashMap<String, IdGenerator> buildLocalGenerators(XAnnotatedElement annElt, ExtendedMappings mappings) {
|
private static HashMap<String, IdGenerator> buildLocalGenerators(XAnnotatedElement annElt, Mappings mappings) {
|
||||||
HashMap<String, IdGenerator> generators = new HashMap<String, IdGenerator>();
|
HashMap<String, IdGenerator> generators = new HashMap<String, IdGenerator>();
|
||||||
TableGenerator tabGen = annElt.getAnnotation( TableGenerator.class );
|
TableGenerator tabGen = annElt.getAnnotation( TableGenerator.class );
|
||||||
SequenceGenerator seqGen = annElt.getAnnotation( SequenceGenerator.class );
|
SequenceGenerator seqGen = annElt.getAnnotation( SequenceGenerator.class );
|
||||||
|
@ -2903,7 +2957,7 @@ public final class AnnotationBinder {
|
||||||
return generators;
|
return generators;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isDefault(XClass clazz, ExtendedMappings mappings) {
|
public static boolean isDefault(XClass clazz, Mappings mappings) {
|
||||||
return mappings.getReflectionManager().equals( clazz, void.class );
|
return mappings.getReflectionManager().equals( clazz, void.class );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2917,7 +2971,7 @@ public final class AnnotationBinder {
|
||||||
*/
|
*/
|
||||||
public static Map<XClass, InheritanceState> buildInheritanceStates(
|
public static Map<XClass, InheritanceState> buildInheritanceStates(
|
||||||
List<XClass> orderedClasses,
|
List<XClass> orderedClasses,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
ReflectionManager reflectionManager = mappings.getReflectionManager();
|
ReflectionManager reflectionManager = mappings.getReflectionManager();
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass = new HashMap<XClass, InheritanceState>(
|
Map<XClass, InheritanceState> inheritanceStatePerClass = new HashMap<XClass, InheritanceState>(
|
||||||
orderedClasses.size()
|
orderedClasses.size()
|
||||||
|
|
|
@ -118,8 +118,8 @@ public class BinderHelper {
|
||||||
PersistentClass ownerEntity,
|
PersistentClass ownerEntity,
|
||||||
PersistentClass associatedEntity,
|
PersistentClass associatedEntity,
|
||||||
Value value,
|
Value value,
|
||||||
boolean inverse, ExtendedMappings mappings
|
boolean inverse,
|
||||||
) {
|
Mappings mappings) {
|
||||||
//associated entity only used for more precise exception, yuk!
|
//associated entity only used for more precise exception, yuk!
|
||||||
if ( columns[0].isImplicit() || StringHelper.isNotEmpty( columns[0].getMappedBy() ) ) return;
|
if ( columns[0].isImplicit() || StringHelper.isNotEmpty( columns[0].getMappedBy() ) ) return;
|
||||||
int fkEnum = Ejb3JoinColumn.checkReferencedColumnsType( columns, ownerEntity, mappings );
|
int fkEnum = Ejb3JoinColumn.checkReferencedColumnsType( columns, ownerEntity, mappings );
|
||||||
|
@ -232,9 +232,9 @@ public class BinderHelper {
|
||||||
|
|
||||||
|
|
||||||
private static List<Property> findPropertiesByColumns(
|
private static List<Property> findPropertiesByColumns(
|
||||||
Object columnOwner, Ejb3JoinColumn[] columns,
|
Object columnOwner,
|
||||||
ExtendedMappings mappings
|
Ejb3JoinColumn[] columns,
|
||||||
) {
|
Mappings mappings) {
|
||||||
Map<Column, Set<Property>> columnsToProperty = new HashMap<Column, Set<Property>>();
|
Map<Column, Set<Property>> columnsToProperty = new HashMap<Column, Set<Property>>();
|
||||||
List<Column> orderedColumns = new ArrayList<Column>( columns.length );
|
List<Column> orderedColumns = new ArrayList<Column>( columns.length );
|
||||||
Table referencedTable = null;
|
Table referencedTable = null;
|
||||||
|
@ -434,8 +434,9 @@ public class BinderHelper {
|
||||||
* If columnName is null or empty, persistentClass is returned
|
* If columnName is null or empty, persistentClass is returned
|
||||||
*/
|
*/
|
||||||
public static Object findColumnOwner(
|
public static Object findColumnOwner(
|
||||||
PersistentClass persistentClass, String columnName, ExtendedMappings mappings
|
PersistentClass persistentClass,
|
||||||
) {
|
String columnName,
|
||||||
|
Mappings mappings) {
|
||||||
if ( StringHelper.isEmpty( columnName ) ) {
|
if ( StringHelper.isEmpty( columnName ) ) {
|
||||||
return persistentClass; //shortcut for implicit referenced column names
|
return persistentClass; //shortcut for implicit referenced column names
|
||||||
}
|
}
|
||||||
|
@ -474,9 +475,11 @@ public class BinderHelper {
|
||||||
* apply an id generator to a SimpleValue
|
* apply an id generator to a SimpleValue
|
||||||
*/
|
*/
|
||||||
public static void makeIdGenerator(
|
public static void makeIdGenerator(
|
||||||
SimpleValue id, String generatorType, String generatorName, ExtendedMappings mappings,
|
SimpleValue id,
|
||||||
Map<String, IdGenerator> localGenerators
|
String generatorType,
|
||||||
) {
|
String generatorName,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<String, IdGenerator> localGenerators) {
|
||||||
Table table = id.getTable();
|
Table table = id.getTable();
|
||||||
table.setIdentifierValue( id );
|
table.setIdentifierValue( id );
|
||||||
//generator settings
|
//generator settings
|
||||||
|
@ -528,9 +531,17 @@ public class BinderHelper {
|
||||||
//equivalent to (but faster) ANNOTATION_STRING_DEFAULT.equals( annotationString );
|
//equivalent to (but faster) ANNOTATION_STRING_DEFAULT.equals( annotationString );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Any buildAnyValue(String anyMetaDefName, Ejb3JoinColumn[] columns, javax.persistence.Column metaColumn, PropertyData inferredData,
|
public static Any buildAnyValue(
|
||||||
boolean cascadeOnDelete, Nullability nullability, PropertyHolder propertyHolder,
|
String anyMetaDefName,
|
||||||
EntityBinder entityBinder, boolean optional, ExtendedMappings mappings) {
|
Ejb3JoinColumn[] columns,
|
||||||
|
javax.persistence.Column metaColumn,
|
||||||
|
PropertyData inferredData,
|
||||||
|
boolean cascadeOnDelete,
|
||||||
|
Nullability nullability,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
EntityBinder entityBinder,
|
||||||
|
boolean optional,
|
||||||
|
Mappings mappings) {
|
||||||
//All FK columns should be in the same table
|
//All FK columns should be in the same table
|
||||||
Any value = new Any( mappings, columns[0].getTable() );
|
Any value = new Any( mappings, columns[0].getTable() );
|
||||||
AnyMetaDef metaAnnDef = inferredData.getProperty().getAnnotation( AnyMetaDef.class );
|
AnyMetaDef metaAnnDef = inferredData.getProperty().getAnnotation( AnyMetaDef.class );
|
||||||
|
@ -577,8 +588,10 @@ public class BinderHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ejb3Column[] metaColumns = Ejb3Column.buildColumnFromAnnotation( new javax.persistence.Column[] { metaColumn }, null,
|
Ejb3Column[] metaColumns = Ejb3Column.buildColumnFromAnnotation(
|
||||||
nullability, propertyHolder, inferredData, entityBinder.getSecondaryTables(), mappings );
|
new javax.persistence.Column[] { metaColumn }, null,
|
||||||
|
nullability, propertyHolder, inferredData, entityBinder.getSecondaryTables(), mappings
|
||||||
|
);
|
||||||
//set metaColumn to the right table
|
//set metaColumn to the right table
|
||||||
for (Ejb3Column column : metaColumns) {
|
for (Ejb3Column column : metaColumns) {
|
||||||
column.setTable( value.getTable() );
|
column.setTable( value.getTable() );
|
||||||
|
@ -597,7 +610,7 @@ public class BinderHelper {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindAnyMetaDefs(XAnnotatedElement annotatedElement, ExtendedMappings mappings) {
|
public static void bindAnyMetaDefs(XAnnotatedElement annotatedElement, Mappings mappings) {
|
||||||
AnyMetaDef defAnn = annotatedElement.getAnnotation( AnyMetaDef.class );
|
AnyMetaDef defAnn = annotatedElement.getAnnotation( AnyMetaDef.class );
|
||||||
AnyMetaDefs defsAnn = annotatedElement.getAnnotation( AnyMetaDefs.class );
|
AnyMetaDefs defsAnn = annotatedElement.getAnnotation( AnyMetaDefs.class );
|
||||||
boolean mustHaveName = XClass.class.isAssignableFrom( annotatedElement.getClass() )
|
boolean mustHaveName = XClass.class.isAssignableFrom( annotatedElement.getClass() )
|
||||||
|
@ -623,15 +636,16 @@ public class BinderHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindAnyMetaDef(AnyMetaDef defAnn, ExtendedMappings mappings) {
|
private static void bindAnyMetaDef(AnyMetaDef defAnn, Mappings mappings) {
|
||||||
if ( isDefault( defAnn.name() ) ) return; //don't map not named definitions
|
if ( isDefault( defAnn.name() ) ) return; //don't map not named definitions
|
||||||
log.info( "Binding Any Meta definition: {}", defAnn.name() );
|
log.info( "Binding Any Meta definition: {}", defAnn.name() );
|
||||||
mappings.addAnyMetaDef( defAnn );
|
mappings.addAnyMetaDef( defAnn );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MappedSuperclass getMappedSuperclassOrNull(XClass declaringClass,
|
public static MappedSuperclass getMappedSuperclassOrNull(
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
XClass declaringClass,
|
||||||
ExtendedMappings mappings) {
|
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
||||||
|
Mappings mappings) {
|
||||||
boolean retrieve = false;
|
boolean retrieve = false;
|
||||||
if ( declaringClass != null ) {
|
if ( declaringClass != null ) {
|
||||||
final InheritanceState inheritanceState = inheritanceStatePerClass.get( declaringClass );
|
final InheritanceState inheritanceState = inheritanceStatePerClass.get( declaringClass );
|
||||||
|
@ -653,7 +667,11 @@ public class BinderHelper {
|
||||||
return StringHelper.qualify( holder.getPath(), property.getPropertyName() );
|
return StringHelper.qualify( holder.getPath(), property.getPropertyName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
static PropertyData getPropertyOverriddenByMapperOrMapsId(boolean isId, PropertyHolder propertyHolder, String propertyName, ExtendedMappings mappings) {
|
static PropertyData getPropertyOverriddenByMapperOrMapsId(
|
||||||
|
boolean isId,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
String propertyName,
|
||||||
|
Mappings mappings) {
|
||||||
final XClass persistentXClass;
|
final XClass persistentXClass;
|
||||||
try {
|
try {
|
||||||
persistentXClass = mappings.getReflectionManager()
|
persistentXClass = mappings.getReflectionManager()
|
||||||
|
|
|
@ -49,9 +49,11 @@ public class ClassPropertyHolder extends AbstractPropertyHolder {
|
||||||
private final Map<XClass, InheritanceState> inheritanceStatePerClass;
|
private final Map<XClass, InheritanceState> inheritanceStatePerClass;
|
||||||
|
|
||||||
public ClassPropertyHolder(
|
public ClassPropertyHolder(
|
||||||
PersistentClass persistentClass, XClass clazzToProcess,
|
PersistentClass persistentClass,
|
||||||
Map<String, Join> joins, ExtendedMappings mappings, Map<XClass, InheritanceState> inheritanceStatePerClass
|
XClass clazzToProcess,
|
||||||
) {
|
Map<String, Join> joins,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
super( persistentClass.getEntityName(), null, clazzToProcess, mappings );
|
super( persistentClass.getEntityName(), null, clazzToProcess, mappings );
|
||||||
this.persistentClass = persistentClass;
|
this.persistentClass = persistentClass;
|
||||||
this.joins = joins;
|
this.joins = joins;
|
||||||
|
@ -59,9 +61,11 @@ public class ClassPropertyHolder extends AbstractPropertyHolder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ClassPropertyHolder(
|
public ClassPropertyHolder(
|
||||||
PersistentClass persistentClass, XClass clazzToProcess, EntityBinder entityBinder,
|
PersistentClass persistentClass,
|
||||||
ExtendedMappings mappings, Map<XClass, InheritanceState> inheritanceStatePerClass
|
XClass clazzToProcess,
|
||||||
) {
|
EntityBinder entityBinder,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
this( persistentClass, clazzToProcess, entityBinder.getSecondaryTables(), mappings, inheritanceStatePerClass );
|
this( persistentClass, clazzToProcess, entityBinder.getSecondaryTables(), mappings, inheritanceStatePerClass );
|
||||||
this.entityBinder = entityBinder;
|
this.entityBinder = entityBinder;
|
||||||
}
|
}
|
||||||
|
@ -127,7 +131,7 @@ public class ClassPropertyHolder extends AbstractPropertyHolder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addPropertyToMappedSuperclass(Property prop, XClass declaringClass) {
|
private void addPropertyToMappedSuperclass(Property prop, XClass declaringClass) {
|
||||||
final ExtendedMappings mappings = getMappings();
|
final Mappings mappings = getMappings();
|
||||||
final Class type = mappings.getReflectionManager().toClass( declaringClass );
|
final Class type = mappings.getReflectionManager().toClass( declaringClass );
|
||||||
MappedSuperclass superclass = mappings.getMappedSuperclass( type );
|
MappedSuperclass superclass = mappings.getMappedSuperclass( type );
|
||||||
superclass.addDeclaredProperty( prop );
|
superclass.addDeclaredProperty( prop );
|
||||||
|
|
|
@ -42,9 +42,12 @@ public class CollectionPropertyHolder extends AbstractPropertyHolder {
|
||||||
Collection collection;
|
Collection collection;
|
||||||
|
|
||||||
public CollectionPropertyHolder(
|
public CollectionPropertyHolder(
|
||||||
Collection collection, String path, XClass clazzToProcess, XProperty property,
|
Collection collection,
|
||||||
PropertyHolder parentPropertyHolder, ExtendedMappings mappings
|
String path,
|
||||||
) {
|
XClass clazzToProcess,
|
||||||
|
XProperty property,
|
||||||
|
PropertyHolder parentPropertyHolder,
|
||||||
|
Mappings mappings) {
|
||||||
super( path, parentPropertyHolder, clazzToProcess, mappings );
|
super( path, parentPropertyHolder, clazzToProcess, mappings );
|
||||||
this.collection = collection;
|
this.collection = collection;
|
||||||
setCurrentProperty( property );
|
setCurrentProperty( property );
|
||||||
|
|
|
@ -46,7 +46,7 @@ import org.hibernate.util.StringHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Do the initial discovery of columns metadata and apply defaults.
|
* Do the initial discovery of columns metadata and apply defaults.
|
||||||
* Also hosts some convinient methods related to column processing
|
* Also hosts some convenient methods related to column processing
|
||||||
*
|
*
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
|
@ -56,11 +56,17 @@ class ColumnsBuilder {
|
||||||
private XProperty property;
|
private XProperty property;
|
||||||
private PropertyData inferredData;
|
private PropertyData inferredData;
|
||||||
private EntityBinder entityBinder;
|
private EntityBinder entityBinder;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private Ejb3Column[] columns;
|
private Ejb3Column[] columns;
|
||||||
private Ejb3JoinColumn[] joinColumns;
|
private Ejb3JoinColumn[] joinColumns;
|
||||||
|
|
||||||
public ColumnsBuilder(PropertyHolder propertyHolder, Nullability nullability, XProperty property, PropertyData inferredData, EntityBinder entityBinder, ExtendedMappings mappings) {
|
public ColumnsBuilder(
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
Nullability nullability,
|
||||||
|
XProperty property,
|
||||||
|
PropertyData inferredData,
|
||||||
|
EntityBinder entityBinder,
|
||||||
|
Mappings mappings) {
|
||||||
this.propertyHolder = propertyHolder;
|
this.propertyHolder = propertyHolder;
|
||||||
this.nullability = nullability;
|
this.nullability = nullability;
|
||||||
this.property = property;
|
this.property = property;
|
||||||
|
@ -214,7 +220,9 @@ class ColumnsBuilder {
|
||||||
|
|
||||||
Ejb3Column[] overrideColumnFromMapperOrMapsIdProperty(boolean isId) {
|
Ejb3Column[] overrideColumnFromMapperOrMapsIdProperty(boolean isId) {
|
||||||
Ejb3Column[] result = columns;
|
Ejb3Column[] result = columns;
|
||||||
final PropertyData overridingProperty = BinderHelper.getPropertyOverriddenByMapperOrMapsId( isId, propertyHolder, property.getName(), mappings );
|
final PropertyData overridingProperty = BinderHelper.getPropertyOverriddenByMapperOrMapsId(
|
||||||
|
isId, propertyHolder, property.getName(), mappings
|
||||||
|
);
|
||||||
if ( overridingProperty != null ) {
|
if ( overridingProperty != null ) {
|
||||||
result = buildExcplicitOrDefaultJoinColumn( overridingProperty );
|
result = buildExcplicitOrDefaultJoinColumn( overridingProperty );
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,9 +84,11 @@ public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ComponentPropertyHolder(
|
public ComponentPropertyHolder(
|
||||||
Component component, String path, PropertyData inferredData, PropertyHolder parent,
|
Component component,
|
||||||
ExtendedMappings mappings
|
String path,
|
||||||
) {
|
PropertyData inferredData,
|
||||||
|
PropertyHolder parent,
|
||||||
|
Mappings mappings) {
|
||||||
super( path, parent, inferredData.getPropertyClass(), mappings );
|
super( path, parent, inferredData.getPropertyClass(), mappings );
|
||||||
final XProperty property = inferredData.getProperty();
|
final XProperty property = inferredData.getProperty();
|
||||||
setCurrentProperty( property );
|
setCurrentProperty( property );
|
||||||
|
|
|
@ -975,7 +975,7 @@ public class Configuration implements Serializable {
|
||||||
*
|
*
|
||||||
* @return The created mappings
|
* @return The created mappings
|
||||||
*/
|
*/
|
||||||
public ExtendedMappings createMappings() {
|
public Mappings createMappings() {
|
||||||
return new MappingsImpl();
|
return new MappingsImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4018,7 +4018,7 @@ public class Configuration implements Serializable {
|
||||||
log.debug( "Process annotated classes" );
|
log.debug( "Process annotated classes" );
|
||||||
//bind classes in the correct order calculating some inheritance state
|
//bind classes in the correct order calculating some inheritance state
|
||||||
List<XClass> orderedClasses = orderAndFillHierarchy( annotatedClasses );
|
List<XClass> orderedClasses = orderAndFillHierarchy( annotatedClasses );
|
||||||
ExtendedMappings mappings = createMappings();
|
Mappings mappings = createMappings();
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass = AnnotationBinder.buildInheritanceStates(
|
Map<XClass, InheritanceState> inheritanceStatePerClass = AnnotationBinder.buildInheritanceStates(
|
||||||
orderedClasses, mappings
|
orderedClasses, mappings
|
||||||
);
|
);
|
||||||
|
|
|
@ -42,28 +42,32 @@ import org.hibernate.mapping.SimpleValue;
|
||||||
public class CopyIdentifierComponentSecondPass implements SecondPass {
|
public class CopyIdentifierComponentSecondPass implements SecondPass {
|
||||||
private final String referencedEntityName;
|
private final String referencedEntityName;
|
||||||
private final Component component;
|
private final Component component;
|
||||||
private final ExtendedMappings mappings;
|
private final Mappings mappings;
|
||||||
private final Ejb3JoinColumn[] joinColumns;
|
private final Ejb3JoinColumn[] joinColumns;
|
||||||
|
|
||||||
public CopyIdentifierComponentSecondPass(
|
public CopyIdentifierComponentSecondPass(
|
||||||
Component comp, String referencedEntityName, Ejb3JoinColumn[] joinColumns, ExtendedMappings mappings) {
|
Component comp,
|
||||||
|
String referencedEntityName,
|
||||||
|
Ejb3JoinColumn[] joinColumns,
|
||||||
|
Mappings mappings) {
|
||||||
this.component = comp;
|
this.component = comp;
|
||||||
this.referencedEntityName = referencedEntityName;
|
this.referencedEntityName = referencedEntityName;
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
this.joinColumns = joinColumns;
|
this.joinColumns = joinColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME better error names
|
@SuppressWarnings({ "unchecked" })
|
||||||
public void doSecondPass(Map persistentClasses) throws MappingException {
|
public void doSecondPass(Map persistentClasses) throws MappingException {
|
||||||
PersistentClass referencedPersistentClass = (PersistentClass) persistentClasses.get( referencedEntityName );
|
PersistentClass referencedPersistentClass = (PersistentClass) persistentClasses.get( referencedEntityName );
|
||||||
|
// TODO better error names
|
||||||
if ( referencedPersistentClass == null ) {
|
if ( referencedPersistentClass == null ) {
|
||||||
throw new AnnotationException(
|
throw new AnnotationException( "Unknown entity name: " + referencedEntityName );
|
||||||
"Unknown entity name: " + referencedEntityName
|
}
|
||||||
);
|
|
||||||
};
|
|
||||||
if ( ! ( referencedPersistentClass.getIdentifier() instanceof Component ) ) {
|
if ( ! ( referencedPersistentClass.getIdentifier() instanceof Component ) ) {
|
||||||
throw new AssertionFailure( "Unexpected identifier type on the referenced entity when mapping a @MapsId: "
|
throw new AssertionFailure(
|
||||||
+ referencedEntityName);
|
"Unexpected identifier type on the referenced entity when mapping a @MapsId: "
|
||||||
|
+ referencedEntityName
|
||||||
|
);
|
||||||
}
|
}
|
||||||
Component referencedComponent = (Component) referencedPersistentClass.getIdentifier();
|
Component referencedComponent = (Component) referencedPersistentClass.getIdentifier();
|
||||||
Iterator<Property> properties = referencedComponent.getPropertyIterator();
|
Iterator<Property> properties = referencedComponent.getPropertyIterator();
|
||||||
|
|
|
@ -52,7 +52,7 @@ public class Ejb3Column {
|
||||||
private String secondaryTableName;
|
private String secondaryTableName;
|
||||||
protected Map<String, Join> joins;
|
protected Map<String, Join> joins;
|
||||||
protected PropertyHolder propertyHolder;
|
protected PropertyHolder propertyHolder;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private boolean isImplicit;
|
private boolean isImplicit;
|
||||||
public static final int DEFAULT_COLUMN_LENGTH = 255;
|
public static final int DEFAULT_COLUMN_LENGTH = 255;
|
||||||
public String sqlType;
|
public String sqlType;
|
||||||
|
@ -96,7 +96,7 @@ public class Ejb3Column {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isFormula() {
|
public boolean isFormula() {
|
||||||
return StringHelper.isNotEmpty(formulaString) ? true : false;
|
return StringHelper.isNotEmpty( formulaString );
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFormulaString() {
|
public String getFormulaString() {
|
||||||
|
@ -123,11 +123,11 @@ public class Ejb3Column {
|
||||||
this.updatable = updatable;
|
this.updatable = updatable;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ExtendedMappings getMappings() {
|
protected Mappings getMappings() {
|
||||||
return mappings;
|
return mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMappings(ExtendedMappings mappings) {
|
public void setMappings(Mappings mappings) {
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,23 +362,25 @@ public class Ejb3Column {
|
||||||
|
|
||||||
public static Ejb3Column[] buildColumnFromAnnotation(
|
public static Ejb3Column[] buildColumnFromAnnotation(
|
||||||
javax.persistence.Column[] anns,
|
javax.persistence.Column[] anns,
|
||||||
org.hibernate.annotations.Formula formulaAnn, Nullability nullability, PropertyHolder propertyHolder,
|
org.hibernate.annotations.Formula formulaAnn,
|
||||||
|
Nullability nullability,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
PropertyData inferredData,
|
PropertyData inferredData,
|
||||||
Map<String, Join> secondaryTables,
|
Map<String, Join> secondaryTables,
|
||||||
ExtendedMappings mappings
|
Mappings mappings){
|
||||||
){
|
|
||||||
return buildColumnFromAnnotation(
|
return buildColumnFromAnnotation(
|
||||||
anns,
|
anns, formulaAnn, nullability, propertyHolder, inferredData, null, secondaryTables, mappings
|
||||||
formulaAnn, nullability, propertyHolder, inferredData, null, secondaryTables, mappings);
|
);
|
||||||
}
|
}
|
||||||
public static Ejb3Column[] buildColumnFromAnnotation(
|
public static Ejb3Column[] buildColumnFromAnnotation(
|
||||||
javax.persistence.Column[] anns,
|
javax.persistence.Column[] anns,
|
||||||
org.hibernate.annotations.Formula formulaAnn, Nullability nullability, PropertyHolder propertyHolder,
|
org.hibernate.annotations.Formula formulaAnn,
|
||||||
|
Nullability nullability,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
PropertyData inferredData,
|
PropertyData inferredData,
|
||||||
String suffixForDefaultColumnName,
|
String suffixForDefaultColumnName,
|
||||||
Map<String, Join> secondaryTables,
|
Map<String, Join> secondaryTables,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
Ejb3Column[] columns;
|
Ejb3Column[] columns;
|
||||||
if ( formulaAnn != null ) {
|
if ( formulaAnn != null ) {
|
||||||
Ejb3Column formulaColumn = new Ejb3Column();
|
Ejb3Column formulaColumn = new Ejb3Column();
|
||||||
|
@ -463,7 +465,7 @@ public class Ejb3Column {
|
||||||
Map<String, Join> secondaryTables,
|
Map<String, Join> secondaryTables,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
Nullability nullability,
|
Nullability nullability,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
Ejb3Column column = new Ejb3Column();
|
Ejb3Column column = new Ejb3Column();
|
||||||
Ejb3Column[] columns = new Ejb3Column[1];
|
Ejb3Column[] columns = new Ejb3Column[1];
|
||||||
columns[0] = column;
|
columns[0] = column;
|
||||||
|
|
|
@ -35,13 +35,11 @@ import org.hibernate.annotations.DiscriminatorFormula;
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
public class Ejb3DiscriminatorColumn extends Ejb3Column {
|
public class Ejb3DiscriminatorColumn extends Ejb3Column {
|
||||||
|
|
||||||
|
|
||||||
private static final String DEFAULT_DISCRIMINATOR_COLUMN_NAME = "DTYPE";
|
private static final String DEFAULT_DISCRIMINATOR_COLUMN_NAME = "DTYPE";
|
||||||
private static final String DEFAULT_DISCRIMINATOR_TYPE = "string";
|
private static final String DEFAULT_DISCRIMINATOR_TYPE = "string";
|
||||||
|
private static final int DEFAULT_DISCRIMINATOR_LENGTH = 31;
|
||||||
|
|
||||||
private String discriminatorTypeName;
|
private String discriminatorTypeName;
|
||||||
private static final int DEFAULT_DISCRIMINATOR_LENGTH = 31;
|
|
||||||
|
|
||||||
public Ejb3DiscriminatorColumn() {
|
public Ejb3DiscriminatorColumn() {
|
||||||
//discriminator default value
|
//discriminator default value
|
||||||
|
@ -61,9 +59,9 @@ public class Ejb3DiscriminatorColumn extends Ejb3Column {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Ejb3DiscriminatorColumn buildDiscriminatorColumn(
|
public static Ejb3DiscriminatorColumn buildDiscriminatorColumn(
|
||||||
DiscriminatorType type, DiscriminatorColumn discAnn, DiscriminatorFormula discFormulaAnn,
|
DiscriminatorType type, DiscriminatorColumn discAnn,
|
||||||
ExtendedMappings mappings
|
DiscriminatorFormula discFormulaAnn,
|
||||||
) {
|
Mappings mappings) {
|
||||||
Ejb3DiscriminatorColumn discriminatorColumn = new Ejb3DiscriminatorColumn();
|
Ejb3DiscriminatorColumn discriminatorColumn = new Ejb3DiscriminatorColumn();
|
||||||
discriminatorColumn.setMappings( mappings );
|
discriminatorColumn.setMappings( mappings );
|
||||||
discriminatorColumn.setImplicit( true );
|
discriminatorColumn.setImplicit( true );
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
this.JPA2ElementCollection = JPA2ElementCollection;
|
this.JPA2ElementCollection = JPA2ElementCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
//FIXME hacky solution to get the information at property ref resolution
|
// TODO hacky solution to get the information at property ref resolution
|
||||||
public String getManyToManyOwnerSideEntityName() {
|
public String getManyToManyOwnerSideEntityName() {
|
||||||
return manyToManyOwnerSideEntityName;
|
return manyToManyOwnerSideEntityName;
|
||||||
}
|
}
|
||||||
|
@ -113,8 +113,7 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
String propertyName,
|
String propertyName,
|
||||||
String mappedBy,
|
String mappedBy,
|
||||||
boolean isImplicit,
|
boolean isImplicit,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
super();
|
super();
|
||||||
setImplicit( isImplicit );
|
setImplicit( isImplicit );
|
||||||
setSqlType( sqlType );
|
setSqlType( sqlType );
|
||||||
|
@ -137,25 +136,27 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
return referencedColumn;
|
return referencedColumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Ejb3JoinColumn[] buildJoinColumnsOrFormulas(
|
public static Ejb3JoinColumn[] buildJoinColumnsOrFormulas(
|
||||||
JoinColumnsOrFormulas anns,
|
JoinColumnsOrFormulas anns,
|
||||||
String mappedBy, Map<String, Join> joins,
|
String mappedBy,
|
||||||
|
Map<String, Join> joins,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
String propertyName,
|
String propertyName,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
|
|
||||||
JoinColumnOrFormula [] ann = anns.value();
|
JoinColumnOrFormula [] ann = anns.value();
|
||||||
Ejb3JoinColumn [] joinColumns = new Ejb3JoinColumn[ann.length];
|
Ejb3JoinColumn [] joinColumns = new Ejb3JoinColumn[ann.length];
|
||||||
for (int i = 0; i < ann.length; i++) {
|
for (int i = 0; i < ann.length; i++) {
|
||||||
JoinColumnOrFormula join = (JoinColumnOrFormula) ann[i];
|
JoinColumnOrFormula join = (JoinColumnOrFormula) ann[i];
|
||||||
JoinFormula formula = join.formula();
|
JoinFormula formula = join.formula();
|
||||||
if (formula.value() != null && !formula.value().equals("")) {
|
if (formula.value() != null && !formula.value().equals("")) {
|
||||||
joinColumns[i] = buildJoinFormula(formula, mappedBy, joins, propertyHolder, propertyName, mappings);
|
joinColumns[i] = buildJoinFormula(
|
||||||
|
formula, mappedBy, joins, propertyHolder, propertyName, mappings
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
joinColumns[i] = buildJoinColumns(new JoinColumn[] { join.column() }, mappedBy, joins, propertyHolder, propertyName, mappings)[0];
|
joinColumns[i] = buildJoinColumns(
|
||||||
|
new JoinColumn[] { join.column() }, mappedBy, joins, propertyHolder, propertyName, mappings
|
||||||
|
)[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,43 +168,42 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
*/
|
*/
|
||||||
public static Ejb3JoinColumn buildJoinFormula(
|
public static Ejb3JoinColumn buildJoinFormula(
|
||||||
JoinFormula ann,
|
JoinFormula ann,
|
||||||
String mappedBy, Map<String, Join> joins,
|
String mappedBy,
|
||||||
|
Map<String, Join> joins,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
String propertyName,
|
String propertyName,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
Ejb3JoinColumn formulaColumn = new Ejb3JoinColumn();
|
||||||
|
formulaColumn.setFormula( ann.value() );
|
||||||
Ejb3JoinColumn formulaColumn = new Ejb3JoinColumn();
|
formulaColumn.setReferencedColumn(ann.referencedColumnName());
|
||||||
formulaColumn.setFormula( ann.value() );
|
formulaColumn.setMappings( mappings );
|
||||||
formulaColumn.setReferencedColumn(ann.referencedColumnName());
|
formulaColumn.setPropertyHolder( propertyHolder );
|
||||||
formulaColumn.setMappings( mappings );
|
formulaColumn.setJoins( joins );
|
||||||
formulaColumn.setPropertyHolder( propertyHolder );
|
formulaColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
|
||||||
formulaColumn.setJoins( joins );
|
formulaColumn.bind();
|
||||||
formulaColumn.setPropertyName( BinderHelper.getRelativePath( propertyHolder, propertyName ) );
|
return formulaColumn;
|
||||||
|
}
|
||||||
formulaColumn.bind();
|
|
||||||
return formulaColumn;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static Ejb3JoinColumn[] buildJoinColumns(
|
public static Ejb3JoinColumn[] buildJoinColumns(
|
||||||
JoinColumn[] anns,
|
JoinColumn[] anns,
|
||||||
String mappedBy, Map<String, Join> joins,
|
String mappedBy,
|
||||||
|
Map<String, Join> joins,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
String propertyName,
|
String propertyName,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
return buildJoinColumnsWithDefaultColumnSuffix(
|
||||||
return buildJoinColumnsWithDefaultColumnSuffix(anns, mappedBy, joins, propertyHolder, propertyName, "", mappings);
|
anns, mappedBy, joins, propertyHolder, propertyName, "", mappings
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Ejb3JoinColumn[] buildJoinColumnsWithDefaultColumnSuffix(
|
public static Ejb3JoinColumn[] buildJoinColumnsWithDefaultColumnSuffix(
|
||||||
JoinColumn[] anns,
|
JoinColumn[] anns,
|
||||||
String mappedBy, Map<String, Join> joins,
|
String mappedBy,
|
||||||
|
Map<String, Join> joins,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
String propertyName,
|
String propertyName,
|
||||||
String suffixForDefaultColumnName,
|
String suffixForDefaultColumnName,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
JoinColumn[] actualColumns = propertyHolder.getOverriddenJoinColumn(
|
JoinColumn[] actualColumns = propertyHolder.getOverriddenJoinColumn(
|
||||||
StringHelper.qualify( propertyHolder.getPath(), propertyName )
|
StringHelper.qualify( propertyHolder.getPath(), propertyName )
|
||||||
);
|
);
|
||||||
|
@ -247,8 +247,7 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
String propertyName,
|
String propertyName,
|
||||||
String suffixForDefaultColumnName,
|
String suffixForDefaultColumnName,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
if ( ann != null ) {
|
if ( ann != null ) {
|
||||||
if ( BinderHelper.isDefault( mappedBy ) ) {
|
if ( BinderHelper.isDefault( mappedBy ) ) {
|
||||||
throw new AnnotationException(
|
throw new AnnotationException(
|
||||||
|
@ -293,7 +292,7 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//FIXME default name still useful in association table
|
// TODO default name still useful in association table
|
||||||
public void setJoinAnnotation(JoinColumn annJoin, String defaultName) {
|
public void setJoinAnnotation(JoinColumn annJoin, String defaultName) {
|
||||||
if ( annJoin == null ) {
|
if ( annJoin == null ) {
|
||||||
setImplicit( true );
|
setImplicit( true );
|
||||||
|
@ -319,9 +318,8 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
JoinColumn joinAnn,
|
JoinColumn joinAnn,
|
||||||
Value identifier,
|
Value identifier,
|
||||||
Map<String, Join> joins,
|
Map<String, Join> joins,
|
||||||
PropertyHolder propertyHolder, ExtendedMappings mappings
|
PropertyHolder propertyHolder,
|
||||||
) {
|
Mappings mappings) {
|
||||||
|
|
||||||
Column col = (Column) identifier.getColumnIterator().next();
|
Column col = (Column) identifier.getColumnIterator().next();
|
||||||
String defaultName = mappings.getLogicalColumnName( col.getQuotedName(), identifier.getTable() );
|
String defaultName = mappings.getLogicalColumnName( col.getQuotedName(), identifier.getTable() );
|
||||||
if ( pkJoinAnn != null || joinAnn != null ) {
|
if ( pkJoinAnn != null || joinAnn != null ) {
|
||||||
|
@ -369,10 +367,11 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
* Override persistent class on oneToMany Cases for late settings
|
* Override persistent class on oneToMany Cases for late settings
|
||||||
* Must only be used on second level pass binding
|
* Must only be used on second level pass binding
|
||||||
*/
|
*/
|
||||||
public void setPersistentClass(PersistentClass persistentClass,
|
public void setPersistentClass(
|
||||||
Map<String, Join> joins,
|
PersistentClass persistentClass,
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
Map<String, Join> joins,
|
||||||
//FIXME shouldn't we deduce the classname from the persistentclasS?
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
|
// TODO shouldn't we deduce the classname from the persistentclasS?
|
||||||
this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( persistentClass, joins, getMappings(), inheritanceStatePerClass );
|
this.propertyHolder = PropertyHolderBuilder.buildPropertyHolder( persistentClass, joins, getMappings(), inheritanceStatePerClass );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,8 +389,9 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
|
|
||||||
|
|
||||||
public void copyReferencedStructureAndCreateDefaultJoinColumns(
|
public void copyReferencedStructureAndCreateDefaultJoinColumns(
|
||||||
PersistentClass referencedEntity, Iterator columnIterator, SimpleValue value
|
PersistentClass referencedEntity,
|
||||||
) {
|
Iterator columnIterator,
|
||||||
|
SimpleValue value) {
|
||||||
if ( !isNameDeferred() ) {
|
if ( !isNameDeferred() ) {
|
||||||
throw new AssertionFailure( "Building implicit column but the column is not implicit" );
|
throw new AssertionFailure( "Building implicit column but the column is not implicit" );
|
||||||
}
|
}
|
||||||
|
@ -404,8 +404,9 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void linkValueUsingDefaultColumnNaming(
|
public void linkValueUsingDefaultColumnNaming(
|
||||||
Column referencedColumn, PersistentClass referencedEntity, SimpleValue value
|
Column referencedColumn,
|
||||||
) {
|
PersistentClass referencedEntity,
|
||||||
|
SimpleValue value) {
|
||||||
String columnName;
|
String columnName;
|
||||||
String logicalReferencedColumn = getMappings().getLogicalColumnName(
|
String logicalReferencedColumn = getMappings().getLogicalColumnName(
|
||||||
referencedColumn.getQuotedName(), referencedEntity.getTable()
|
referencedColumn.getQuotedName(), referencedEntity.getTable()
|
||||||
|
@ -528,9 +529,9 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
public static final int NON_PK_REFERENCE = 2;
|
public static final int NON_PK_REFERENCE = 2;
|
||||||
|
|
||||||
public static int checkReferencedColumnsType(
|
public static int checkReferencedColumnsType(
|
||||||
Ejb3JoinColumn[] columns, PersistentClass referencedEntity,
|
Ejb3JoinColumn[] columns,
|
||||||
ExtendedMappings mappings
|
PersistentClass referencedEntity,
|
||||||
) {
|
Mappings mappings) {
|
||||||
//convenient container to find whether a column is an id one or not
|
//convenient container to find whether a column is an id one or not
|
||||||
Set<Column> idColumns = new HashSet<Column>();
|
Set<Column> idColumns = new HashSet<Column>();
|
||||||
Iterator idColumnsIt = referencedEntity.getKey().getColumnIterator();
|
Iterator idColumnsIt = referencedEntity.getKey().getColumnIterator();
|
||||||
|
@ -605,7 +606,6 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
* @param column the referenced column.
|
* @param column the referenced column.
|
||||||
*/
|
*/
|
||||||
public void overrideFromReferencedColumnIfNecessary(org.hibernate.mapping.Column column) {
|
public void overrideFromReferencedColumnIfNecessary(org.hibernate.mapping.Column column) {
|
||||||
|
|
||||||
if (getMappingColumn() != null) {
|
if (getMappingColumn() != null) {
|
||||||
// columnDefinition can also be specified using @JoinColumn, hence we have to check
|
// columnDefinition can also be specified using @JoinColumn, hence we have to check
|
||||||
// whether it is set or not
|
// whether it is set or not
|
||||||
|
@ -633,9 +633,12 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Ejb3JoinColumn[] buildJoinTableJoinColumns(
|
public static Ejb3JoinColumn[] buildJoinTableJoinColumns(
|
||||||
JoinColumn[] annJoins, Map<String, Join> secondaryTables,
|
JoinColumn[] annJoins,
|
||||||
PropertyHolder propertyHolder, String propertyName, String mappedBy, ExtendedMappings mappings
|
Map<String, Join> secondaryTables,
|
||||||
) {
|
PropertyHolder propertyHolder,
|
||||||
|
String propertyName,
|
||||||
|
String mappedBy,
|
||||||
|
Mappings mappings) {
|
||||||
Ejb3JoinColumn[] joinColumns;
|
Ejb3JoinColumn[] joinColumns;
|
||||||
if ( annJoins == null ) {
|
if ( annJoins == null ) {
|
||||||
Ejb3JoinColumn currentJoinColumn = new Ejb3JoinColumn();
|
Ejb3JoinColumn currentJoinColumn = new Ejb3JoinColumn();
|
||||||
|
|
|
@ -34,12 +34,10 @@ import org.hibernate.mapping.Join;
|
||||||
*
|
*
|
||||||
* @author inger
|
* @author inger
|
||||||
*/
|
*/
|
||||||
public class IndexColumn
|
public class IndexColumn extends Ejb3Column {
|
||||||
extends Ejb3Column {
|
|
||||||
|
|
||||||
private int base;
|
private int base;
|
||||||
|
|
||||||
//FIXME move to a getter setter strategy for readeability
|
// TODO move to a getter setter strategy for readability
|
||||||
public IndexColumn(
|
public IndexColumn(
|
||||||
boolean isImplicit,
|
boolean isImplicit,
|
||||||
String sqlType,
|
String sqlType,
|
||||||
|
@ -54,8 +52,7 @@ public class IndexColumn
|
||||||
String secondaryTableName,
|
String secondaryTableName,
|
||||||
Map<String, Join> joins,
|
Map<String, Join> joins,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
super();
|
super();
|
||||||
setImplicit( isImplicit );
|
setImplicit( isImplicit );
|
||||||
setSqlType( sqlType );
|
setSqlType( sqlType );
|
||||||
|
@ -72,8 +69,6 @@ public class IndexColumn
|
||||||
setJoins( joins );
|
setJoins( joins );
|
||||||
setMappings( mappings );
|
setMappings( mappings );
|
||||||
bind();
|
bind();
|
||||||
//super(isImplicit, sqlType, length, precision, scale, name, nullable, unique, insertable, updatable, secondaryTableName, joins, propertyHolder, mappings);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getBase() {
|
public int getBase() {
|
||||||
|
@ -90,8 +85,7 @@ public class IndexColumn
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
PropertyData inferredData,
|
PropertyData inferredData,
|
||||||
Map<String, Join> secondaryTables,
|
Map<String, Join> secondaryTables,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
IndexColumn column;
|
IndexColumn column;
|
||||||
if ( ann != null ) {
|
if ( ann != null ) {
|
||||||
String sqlType = BinderHelper.isDefault( ann.columnDefinition() ) ? null : ann.columnDefinition();
|
String sqlType = BinderHelper.isDefault( ann.columnDefinition() ) ? null : ann.columnDefinition();
|
||||||
|
@ -123,8 +117,7 @@ public class IndexColumn
|
||||||
org.hibernate.annotations.IndexColumn ann,
|
org.hibernate.annotations.IndexColumn ann,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
PropertyData inferredData,
|
PropertyData inferredData,
|
||||||
ExtendedMappings mappings
|
Mappings mappings) {
|
||||||
) {
|
|
||||||
IndexColumn column;
|
IndexColumn column;
|
||||||
if ( ann != null ) {
|
if ( ann != null ) {
|
||||||
String sqlType = BinderHelper.isDefault( ann.columnDefinition() ) ? null : ann.columnDefinition();
|
String sqlType = BinderHelper.isDefault( ann.columnDefinition() ) ? null : ann.columnDefinition();
|
||||||
|
|
|
@ -37,14 +37,14 @@ public class IndexOrUniqueKeySecondPass implements SecondPass {
|
||||||
private Table table;
|
private Table table;
|
||||||
private final String indexName;
|
private final String indexName;
|
||||||
private final String[] columns;
|
private final String[] columns;
|
||||||
private final ExtendedMappings mappings;
|
private final Mappings mappings;
|
||||||
private final Ejb3Column column;
|
private final Ejb3Column column;
|
||||||
private final boolean unique;
|
private final boolean unique;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build an index
|
* Build an index
|
||||||
*/
|
*/
|
||||||
public IndexOrUniqueKeySecondPass(Table table, String indexName, String[] columns, ExtendedMappings mappings) {
|
public IndexOrUniqueKeySecondPass(Table table, String indexName, String[] columns, Mappings mappings) {
|
||||||
this.table = table;
|
this.table = table;
|
||||||
this.indexName = indexName;
|
this.indexName = indexName;
|
||||||
this.columns = columns;
|
this.columns = columns;
|
||||||
|
@ -56,15 +56,14 @@ public class IndexOrUniqueKeySecondPass implements SecondPass {
|
||||||
/**
|
/**
|
||||||
* Build an index
|
* Build an index
|
||||||
*/
|
*/
|
||||||
public IndexOrUniqueKeySecondPass(String indexName, Ejb3Column column, ExtendedMappings mappings) {
|
public IndexOrUniqueKeySecondPass(String indexName, Ejb3Column column, Mappings mappings) {
|
||||||
this( indexName, column, mappings, false );
|
this( indexName, column, mappings, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build an index if unique is false or a Unique Key if unique is true
|
* Build an index if unique is false or a Unique Key if unique is true
|
||||||
*/
|
*/
|
||||||
public IndexOrUniqueKeySecondPass(String indexName, Ejb3Column column,
|
public IndexOrUniqueKeySecondPass(String indexName, Ejb3Column column, Mappings mappings, boolean unique) {
|
||||||
ExtendedMappings mappings, boolean unique) {
|
|
||||||
this.indexName = indexName;
|
this.indexName = indexName;
|
||||||
this.column = column;
|
this.column = column;
|
||||||
this.columns = null;
|
this.columns = null;
|
||||||
|
|
|
@ -62,14 +62,12 @@ public class InheritanceState {
|
||||||
private boolean isEmbeddableSuperclass = false;
|
private boolean isEmbeddableSuperclass = false;
|
||||||
private Map<XClass, InheritanceState> inheritanceStatePerClass;
|
private Map<XClass, InheritanceState> inheritanceStatePerClass;
|
||||||
private List<XClass> classesToProcessForMappedSuperclass = new ArrayList<XClass>();
|
private List<XClass> classesToProcessForMappedSuperclass = new ArrayList<XClass>();
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private AccessType accessType;
|
private AccessType accessType;
|
||||||
private ElementsToProcess elementsToProcess;
|
private ElementsToProcess elementsToProcess;
|
||||||
private Boolean hasIdClassOrEmbeddedId;
|
private Boolean hasIdClassOrEmbeddedId;
|
||||||
|
|
||||||
public InheritanceState(XClass clazz,
|
public InheritanceState(XClass clazz, Map<XClass, InheritanceState> inheritanceStatePerClass, Mappings mappings) {
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass,
|
|
||||||
ExtendedMappings mappings) {
|
|
||||||
this.setClazz( clazz );
|
this.setClazz( clazz );
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
this.inheritanceStatePerClass = inheritanceStatePerClass;
|
this.inheritanceStatePerClass = inheritanceStatePerClass;
|
||||||
|
|
|
@ -36,9 +36,13 @@ import org.hibernate.mapping.SimpleValue;
|
||||||
@SuppressWarnings({"serial", "unchecked"})
|
@SuppressWarnings({"serial", "unchecked"})
|
||||||
public class JoinedSubclassFkSecondPass extends FkSecondPass {
|
public class JoinedSubclassFkSecondPass extends FkSecondPass {
|
||||||
private JoinedSubclass entity;
|
private JoinedSubclass entity;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
|
|
||||||
public JoinedSubclassFkSecondPass(JoinedSubclass entity, Ejb3JoinColumn[] inheritanceJoinedColumns, SimpleValue key, ExtendedMappings mappings) {
|
public JoinedSubclassFkSecondPass(
|
||||||
|
JoinedSubclass entity,
|
||||||
|
Ejb3JoinColumn[] inheritanceJoinedColumns,
|
||||||
|
SimpleValue key,
|
||||||
|
Mappings mappings) {
|
||||||
super( key, inheritanceJoinedColumns );
|
super( key, inheritanceJoinedColumns );
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
|
|
|
@ -48,7 +48,7 @@ import org.hibernate.util.StringHelper;
|
||||||
*/
|
*/
|
||||||
public class OneToOneSecondPass implements SecondPass {
|
public class OneToOneSecondPass implements SecondPass {
|
||||||
private String mappedBy;
|
private String mappedBy;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private String ownerEntity;
|
private String ownerEntity;
|
||||||
private String ownerProperty;
|
private String ownerProperty;
|
||||||
private PropertyHolder propertyHolder;
|
private PropertyHolder propertyHolder;
|
||||||
|
@ -62,11 +62,18 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
|
|
||||||
//that suck, we should read that from the property mainly
|
//that suck, we should read that from the property mainly
|
||||||
public OneToOneSecondPass(
|
public OneToOneSecondPass(
|
||||||
String mappedBy, String ownerEntity, String ownerProperty,
|
String mappedBy,
|
||||||
PropertyHolder propertyHolder, PropertyData inferredData, XClass targetEntity, boolean ignoreNotFound,
|
String ownerEntity,
|
||||||
boolean cascadeOnDelete, boolean optional, String cascadeStrategy, Ejb3JoinColumn[] columns,
|
String ownerProperty,
|
||||||
ExtendedMappings mappings
|
PropertyHolder propertyHolder,
|
||||||
) {
|
PropertyData inferredData,
|
||||||
|
XClass targetEntity,
|
||||||
|
boolean ignoreNotFound,
|
||||||
|
boolean cascadeOnDelete,
|
||||||
|
boolean optional,
|
||||||
|
String cascadeStrategy,
|
||||||
|
Ejb3JoinColumn[] columns,
|
||||||
|
Mappings mappings) {
|
||||||
this.ownerEntity = ownerEntity;
|
this.ownerEntity = ownerEntity;
|
||||||
this.ownerProperty = ownerProperty;
|
this.ownerProperty = ownerProperty;
|
||||||
this.mappedBy = mappedBy;
|
this.mappedBy = mappedBy;
|
||||||
|
|
|
@ -46,11 +46,11 @@ public final class PropertyHolderBuilder {
|
||||||
XClass clazzToProcess,
|
XClass clazzToProcess,
|
||||||
PersistentClass persistentClass,
|
PersistentClass persistentClass,
|
||||||
EntityBinder entityBinder,
|
EntityBinder entityBinder,
|
||||||
//Map<String, Join> joins,
|
Mappings mappings,
|
||||||
ExtendedMappings mappings,
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass
|
return new ClassPropertyHolder(
|
||||||
) {
|
persistentClass, clazzToProcess, entityBinder, mappings, inheritanceStatePerClass
|
||||||
return new ClassPropertyHolder( persistentClass, clazzToProcess, entityBinder, mappings, inheritanceStatePerClass );
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -62,9 +62,11 @@ public final class PropertyHolderBuilder {
|
||||||
* @return PropertyHolder
|
* @return PropertyHolder
|
||||||
*/
|
*/
|
||||||
public static PropertyHolder buildPropertyHolder(
|
public static PropertyHolder buildPropertyHolder(
|
||||||
Component component, String path, PropertyData inferredData, PropertyHolder parent,
|
Component component,
|
||||||
ExtendedMappings mappings
|
String path,
|
||||||
) {
|
PropertyData inferredData,
|
||||||
|
PropertyHolder parent,
|
||||||
|
Mappings mappings) {
|
||||||
return new ComponentPropertyHolder( component, path, inferredData, parent, mappings );
|
return new ComponentPropertyHolder( component, path, inferredData, parent, mappings );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,20 +74,25 @@ public final class PropertyHolderBuilder {
|
||||||
* buid a property holder on top of a collection
|
* buid a property holder on top of a collection
|
||||||
*/
|
*/
|
||||||
public static PropertyHolder buildPropertyHolder(
|
public static PropertyHolder buildPropertyHolder(
|
||||||
Collection collection, String path, XClass clazzToProcess, XProperty property,
|
Collection collection,
|
||||||
PropertyHolder parentPropertyHolder, ExtendedMappings mappings
|
String path,
|
||||||
) {
|
XClass clazzToProcess,
|
||||||
return new CollectionPropertyHolder( collection, path, clazzToProcess, property, parentPropertyHolder, mappings );
|
XProperty property,
|
||||||
|
PropertyHolder parentPropertyHolder,
|
||||||
|
Mappings mappings) {
|
||||||
|
return new CollectionPropertyHolder(
|
||||||
|
collection, path, clazzToProcess, property, parentPropertyHolder, mappings
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* must only be used on second level phases (<join> has to be settled already)
|
* must only be used on second level phases (<join> has to be settled already)
|
||||||
*/
|
*/
|
||||||
public static PropertyHolder buildPropertyHolder(
|
public static PropertyHolder buildPropertyHolder(
|
||||||
PersistentClass persistentClass, Map<String, Join> joins,
|
PersistentClass persistentClass,
|
||||||
ExtendedMappings mappings,
|
Map<String, Join> joins,
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass
|
Mappings mappings,
|
||||||
) {
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
return new ClassPropertyHolder( persistentClass, null, joins, mappings, inheritanceStatePerClass );
|
return new ClassPropertyHolder( persistentClass, null, joins, mappings, inheritanceStatePerClass );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
public class ToOneBinder {
|
public class ToOneBinder {
|
||||||
public static String getReferenceEntityName(PropertyData propertyData, XClass targetEntity, ExtendedMappings mappings) {
|
public static String getReferenceEntityName(PropertyData propertyData, XClass targetEntity, Mappings mappings) {
|
||||||
if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
|
if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
|
||||||
return propertyData.getClassOrElementName();
|
return propertyData.getClassOrElementName();
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ public class ToOneBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getReferenceEntityName(PropertyData propertyData, ExtendedMappings mappings) {
|
public static String getReferenceEntityName(PropertyData propertyData, Mappings mappings) {
|
||||||
XClass targetEntity = getTargetEntity( propertyData, mappings );
|
XClass targetEntity = getTargetEntity( propertyData, mappings );
|
||||||
if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
|
if ( AnnotationBinder.isDefault( targetEntity, mappings ) ) {
|
||||||
return propertyData.getClassOrElementName();
|
return propertyData.getClassOrElementName();
|
||||||
|
@ -57,7 +57,7 @@ public class ToOneBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static XClass getTargetEntity(PropertyData propertyData, ExtendedMappings mappings) {
|
public static XClass getTargetEntity(PropertyData propertyData, Mappings mappings) {
|
||||||
XProperty property = propertyData.getProperty();
|
XProperty property = propertyData.getProperty();
|
||||||
return mappings.getReflectionManager().toXClass( getTargetEntityClass( property ) );
|
return mappings.getReflectionManager().toXClass( getTargetEntityClass( property ) );
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,13 +47,17 @@ import org.hibernate.util.StringHelper;
|
||||||
*/
|
*/
|
||||||
public class ToOneFkSecondPass extends FkSecondPass {
|
public class ToOneFkSecondPass extends FkSecondPass {
|
||||||
private boolean unique;
|
private boolean unique;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private String path;
|
private String path;
|
||||||
private String entityClassName;
|
private String entityClassName;
|
||||||
|
|
||||||
public ToOneFkSecondPass(
|
public ToOneFkSecondPass(
|
||||||
ToOne value, Ejb3JoinColumn[] columns, boolean unique, String entityClassName, String path, ExtendedMappings mappings
|
ToOne value,
|
||||||
) {
|
Ejb3JoinColumn[] columns,
|
||||||
|
boolean unique,
|
||||||
|
String entityClassName,
|
||||||
|
String path,
|
||||||
|
Mappings mappings) {
|
||||||
super( value, columns );
|
super( value, columns );
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
this.unique = unique;
|
this.unique = unique;
|
||||||
|
|
|
@ -34,12 +34,14 @@ import org.hibernate.mapping.PersistentClass;
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
public class VerifyFetchProfileReferenceSecondPass implements SecondPass {
|
public class VerifyFetchProfileReferenceSecondPass implements SecondPass {
|
||||||
|
|
||||||
private String fetchProfileName;
|
private String fetchProfileName;
|
||||||
private FetchProfile.FetchOverride fetch;
|
private FetchProfile.FetchOverride fetch;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
|
|
||||||
public VerifyFetchProfileReferenceSecondPass(String fetchProfileName, FetchProfile.FetchOverride fetch, ExtendedMappings mappings) {
|
public VerifyFetchProfileReferenceSecondPass(
|
||||||
|
String fetchProfileName,
|
||||||
|
FetchProfile.FetchOverride fetch,
|
||||||
|
Mappings mappings) {
|
||||||
this.fetchProfileName = fetchProfileName;
|
this.fetchProfileName = fetchProfileName;
|
||||||
this.fetch = fetch;
|
this.fetch = fetch;
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
|
|
|
@ -85,9 +85,9 @@ import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.CollectionSecondPass;
|
import org.hibernate.cfg.CollectionSecondPass;
|
||||||
import org.hibernate.cfg.Ejb3Column;
|
import org.hibernate.cfg.Ejb3Column;
|
||||||
import org.hibernate.cfg.Ejb3JoinColumn;
|
import org.hibernate.cfg.Ejb3JoinColumn;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
|
||||||
import org.hibernate.cfg.IndexColumn;
|
import org.hibernate.cfg.IndexColumn;
|
||||||
import org.hibernate.cfg.InheritanceState;
|
import org.hibernate.cfg.InheritanceState;
|
||||||
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.PropertyData;
|
import org.hibernate.cfg.PropertyData;
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
import org.hibernate.cfg.PropertyHolder;
|
||||||
import org.hibernate.cfg.PropertyHolderBuilder;
|
import org.hibernate.cfg.PropertyHolderBuilder;
|
||||||
|
@ -121,7 +121,6 @@ import org.hibernate.util.StringHelper;
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({"unchecked", "serial"})
|
@SuppressWarnings({"unchecked", "serial"})
|
||||||
public abstract class CollectionBinder {
|
public abstract class CollectionBinder {
|
||||||
|
|
||||||
private Logger log = LoggerFactory.getLogger( CollectionBinder.class );
|
private Logger log = LoggerFactory.getLogger( CollectionBinder.class );
|
||||||
|
|
||||||
protected Collection collection;
|
protected Collection collection;
|
||||||
|
@ -131,7 +130,7 @@ public abstract class CollectionBinder {
|
||||||
private String mappedBy;
|
private String mappedBy;
|
||||||
private XClass collectionType;
|
private XClass collectionType;
|
||||||
private XClass targetEntity;
|
private XClass targetEntity;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private Ejb3JoinColumn[] inverseJoinColumns;
|
private Ejb3JoinColumn[] inverseJoinColumns;
|
||||||
private String cascadeStrategy;
|
private String cascadeStrategy;
|
||||||
String cacheConcurrencyStrategy;
|
String cacheConcurrencyStrategy;
|
||||||
|
@ -163,7 +162,7 @@ public abstract class CollectionBinder {
|
||||||
private AccessType accessType;
|
private AccessType accessType;
|
||||||
private boolean hibernateExtensionMapping;
|
private boolean hibernateExtensionMapping;
|
||||||
|
|
||||||
protected ExtendedMappings getMappings() {
|
protected Mappings getMappings() {
|
||||||
return mappings;
|
return mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,9 +243,10 @@ public abstract class CollectionBinder {
|
||||||
* collection binder factory
|
* collection binder factory
|
||||||
*/
|
*/
|
||||||
public static CollectionBinder getCollectionBinder(
|
public static CollectionBinder getCollectionBinder(
|
||||||
String entityName, XProperty property,
|
String entityName,
|
||||||
boolean isIndexed, boolean isHibernateExtensionMapping
|
XProperty property,
|
||||||
) {
|
boolean isIndexed,
|
||||||
|
boolean isHibernateExtensionMapping) {
|
||||||
CollectionBinder result;
|
CollectionBinder result;
|
||||||
if ( property.isArray() ) {
|
if ( property.isArray() ) {
|
||||||
if ( property.getElementClass().isPrimitive() ) {
|
if ( property.getElementClass().isPrimitive() ) {
|
||||||
|
@ -351,7 +351,7 @@ public abstract class CollectionBinder {
|
||||||
this.targetEntity = targetEntity;
|
this.targetEntity = targetEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMappings(ExtendedMappings mappings) {
|
public void setMappings(Mappings mappings) {
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -610,23 +610,25 @@ public abstract class CollectionBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public SecondPass getSecondPass(
|
public SecondPass getSecondPass(
|
||||||
final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
|
final Ejb3JoinColumn[] fkJoinColumns,
|
||||||
|
final Ejb3JoinColumn[] keyColumns,
|
||||||
final Ejb3JoinColumn[] inverseColumns,
|
final Ejb3JoinColumn[] inverseColumns,
|
||||||
final Ejb3Column[] elementColumns,
|
final Ejb3Column[] elementColumns,
|
||||||
final Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
|
final Ejb3Column[] mapKeyColumns,
|
||||||
final XProperty property, final XClass collType,
|
final Ejb3JoinColumn[] mapKeyManyToManyColumns,
|
||||||
final boolean ignoreNotFound, final boolean unique,
|
final boolean isEmbedded,
|
||||||
final TableBinder assocTableBinder, final ExtendedMappings mappings
|
final XProperty property,
|
||||||
) {
|
final XClass collType,
|
||||||
|
final boolean ignoreNotFound,
|
||||||
|
final boolean unique,
|
||||||
|
final TableBinder assocTableBinder,
|
||||||
|
final Mappings mappings) {
|
||||||
return new CollectionSecondPass( mappings, collection ) {
|
return new CollectionSecondPass( mappings, collection ) {
|
||||||
|
public void secondPass(java.util.Map persistentClasses, java.util.Map inheritedMetas) throws MappingException {
|
||||||
public void secondPass(java.util.Map persistentClasses, java.util.Map inheritedMetas)
|
|
||||||
throws MappingException {
|
|
||||||
bindStarToManySecondPass(
|
bindStarToManySecondPass(
|
||||||
persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
|
persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns,
|
||||||
isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
|
isEmbedded, property, unique, assocTableBinder, ignoreNotFound, mappings
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -635,13 +637,18 @@ public abstract class CollectionBinder {
|
||||||
* return true if it's a Fk, false if it's an association table
|
* return true if it's a Fk, false if it's an association table
|
||||||
*/
|
*/
|
||||||
protected boolean bindStarToManySecondPass(
|
protected boolean bindStarToManySecondPass(
|
||||||
Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns,
|
Map persistentClasses,
|
||||||
Ejb3JoinColumn[] keyColumns, Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns,
|
XClass collType,
|
||||||
|
Ejb3JoinColumn[] fkJoinColumns,
|
||||||
|
Ejb3JoinColumn[] keyColumns,
|
||||||
|
Ejb3JoinColumn[] inverseColumns,
|
||||||
|
Ejb3Column[] elementColumns,
|
||||||
boolean isEmbedded,
|
boolean isEmbedded,
|
||||||
XProperty property, boolean unique,
|
XProperty property,
|
||||||
|
boolean unique,
|
||||||
TableBinder associationTableBinder,
|
TableBinder associationTableBinder,
|
||||||
boolean ignoreNotFound, ExtendedMappings mappings
|
boolean ignoreNotFound,
|
||||||
) {
|
Mappings mappings) {
|
||||||
PersistentClass persistentClass = (PersistentClass) persistentClasses.get( collType.getName() );
|
PersistentClass persistentClass = (PersistentClass) persistentClasses.get( collType.getName() );
|
||||||
boolean reversePropertyInJoin = false;
|
boolean reversePropertyInJoin = false;
|
||||||
if ( persistentClass != null && StringHelper.isNotEmpty( this.mappedBy ) ) {
|
if ( persistentClass != null && StringHelper.isNotEmpty( this.mappedBy ) ) {
|
||||||
|
@ -699,14 +706,17 @@ public abstract class CollectionBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void bindOneToManySecondPass(
|
protected void bindOneToManySecondPass(
|
||||||
Collection collection, Map persistentClasses, Ejb3JoinColumn[] fkJoinColumns,
|
Collection collection,
|
||||||
|
Map persistentClasses,
|
||||||
|
Ejb3JoinColumn[] fkJoinColumns,
|
||||||
XClass collectionType,
|
XClass collectionType,
|
||||||
boolean cascadeDeleteEnabled, boolean ignoreNotFound, String hqlOrderBy, ExtendedMappings extendedMappings,
|
boolean cascadeDeleteEnabled,
|
||||||
Map<XClass, InheritanceState> inheritanceStatePerClass
|
boolean ignoreNotFound,
|
||||||
) {
|
String hqlOrderBy,
|
||||||
|
Mappings mappings,
|
||||||
|
Map<XClass, InheritanceState> inheritanceStatePerClass) {
|
||||||
log.debug("Binding a OneToMany: {}.{} through a foreign key", propertyHolder.getEntityName(), propertyName);
|
log.debug("Binding a OneToMany: {}.{} through a foreign key", propertyHolder.getEntityName(), propertyName);
|
||||||
org.hibernate.mapping.OneToMany oneToMany = new org.hibernate.mapping.OneToMany( extendedMappings, collection.getOwner() );
|
org.hibernate.mapping.OneToMany oneToMany = new org.hibernate.mapping.OneToMany( mappings, collection.getOwner() );
|
||||||
collection.setElement( oneToMany );
|
collection.setElement( oneToMany );
|
||||||
oneToMany.setReferencedEntityName( collectionType.getName() );
|
oneToMany.setReferencedEntityName( collectionType.getName() );
|
||||||
oneToMany.setIgnoreNotFound( ignoreNotFound );
|
oneToMany.setIgnoreNotFound( ignoreNotFound );
|
||||||
|
@ -1076,7 +1086,7 @@ public abstract class CollectionBinder {
|
||||||
|
|
||||||
private static SimpleValue buildCollectionKey(
|
private static SimpleValue buildCollectionKey(
|
||||||
Collection collValue, Ejb3JoinColumn[] joinColumns, boolean cascadeDeleteEnabled,
|
Collection collValue, Ejb3JoinColumn[] joinColumns, boolean cascadeDeleteEnabled,
|
||||||
XProperty property, ExtendedMappings mappings
|
XProperty property, Mappings mappings
|
||||||
) {
|
) {
|
||||||
//binding key reference using column
|
//binding key reference using column
|
||||||
KeyValue keyVal;
|
KeyValue keyVal;
|
||||||
|
@ -1127,9 +1137,11 @@ public abstract class CollectionBinder {
|
||||||
XClass collType,
|
XClass collType,
|
||||||
boolean ignoreNotFound, boolean unique,
|
boolean ignoreNotFound, boolean unique,
|
||||||
boolean cascadeDeleteEnabled,
|
boolean cascadeDeleteEnabled,
|
||||||
TableBinder associationTableBinder, XProperty property, PropertyHolder parentPropertyHolder,
|
TableBinder associationTableBinder,
|
||||||
String hqlOrderBy, ExtendedMappings mappings
|
XProperty property,
|
||||||
) throws MappingException {
|
PropertyHolder parentPropertyHolder,
|
||||||
|
String hqlOrderBy,
|
||||||
|
Mappings mappings) throws MappingException {
|
||||||
|
|
||||||
PersistentClass collectionEntity = (PersistentClass) persistentClasses.get( collType.getName() );
|
PersistentClass collectionEntity = (PersistentClass) persistentClasses.get( collType.getName() );
|
||||||
boolean isCollectionOfEntities = collectionEntity != null;
|
boolean isCollectionOfEntities = collectionEntity != null;
|
||||||
|
@ -1415,10 +1427,12 @@ public abstract class CollectionBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void bindCollectionSecondPass(
|
private static void bindCollectionSecondPass(
|
||||||
Collection collValue, PersistentClass collectionEntity, Ejb3JoinColumn[] joinColumns,
|
Collection collValue,
|
||||||
boolean cascadeDeleteEnabled, XProperty property,
|
PersistentClass collectionEntity,
|
||||||
ExtendedMappings mappings
|
Ejb3JoinColumn[] joinColumns,
|
||||||
) {
|
boolean cascadeDeleteEnabled,
|
||||||
|
XProperty property,
|
||||||
|
Mappings mappings) {
|
||||||
BinderHelper.createSyntheticPropertyReference(
|
BinderHelper.createSyntheticPropertyReference(
|
||||||
joinColumns, collValue.getOwner(), collectionEntity, collValue, false, mappings
|
joinColumns, collValue.getOwner(), collectionEntity, collValue, false, mappings
|
||||||
);
|
);
|
||||||
|
@ -1450,9 +1464,11 @@ public abstract class CollectionBinder {
|
||||||
* Otherwise delegates to the usual algorithm
|
* Otherwise delegates to the usual algorithm
|
||||||
*/
|
*/
|
||||||
public static void bindManytoManyInverseFk(
|
public static void bindManytoManyInverseFk(
|
||||||
PersistentClass referencedEntity, Ejb3JoinColumn[] columns, SimpleValue value, boolean unique,
|
PersistentClass referencedEntity,
|
||||||
ExtendedMappings mappings
|
Ejb3JoinColumn[] columns,
|
||||||
) {
|
SimpleValue value,
|
||||||
|
boolean unique,
|
||||||
|
Mappings mappings) {
|
||||||
final String mappedBy = columns[0].getMappedBy();
|
final String mappedBy = columns[0].getMappedBy();
|
||||||
if ( StringHelper.isNotEmpty( mappedBy ) ) {
|
if ( StringHelper.isNotEmpty( mappedBy ) ) {
|
||||||
final Property property = referencedEntity.getRecursiveProperty( mappedBy );
|
final Property property = referencedEntity.getRecursiveProperty( mappedBy );
|
||||||
|
|
|
@ -66,8 +66,8 @@ import org.hibernate.cfg.AccessType;
|
||||||
import org.hibernate.cfg.AnnotationBinder;
|
import org.hibernate.cfg.AnnotationBinder;
|
||||||
import org.hibernate.cfg.BinderHelper;
|
import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.Ejb3JoinColumn;
|
import org.hibernate.cfg.Ejb3JoinColumn;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
|
||||||
import org.hibernate.cfg.InheritanceState;
|
import org.hibernate.cfg.InheritanceState;
|
||||||
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
import org.hibernate.cfg.PropertyHolder;
|
||||||
import org.hibernate.cfg.ObjectNameSource;
|
import org.hibernate.cfg.ObjectNameSource;
|
||||||
import org.hibernate.cfg.NamingStrategy;
|
import org.hibernate.cfg.NamingStrategy;
|
||||||
|
@ -99,7 +99,7 @@ public class EntityBinder {
|
||||||
private String name;
|
private String name;
|
||||||
private XClass annotatedClass;
|
private XClass annotatedClass;
|
||||||
private PersistentClass persistentClass;
|
private PersistentClass persistentClass;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private Logger log = LoggerFactory.getLogger( EntityBinder.class );
|
private Logger log = LoggerFactory.getLogger( EntityBinder.class );
|
||||||
private String discriminatorValue = "";
|
private String discriminatorValue = "";
|
||||||
private boolean dynamicInsert;
|
private boolean dynamicInsert;
|
||||||
|
@ -136,10 +136,11 @@ public class EntityBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public EntityBinder(
|
public EntityBinder(
|
||||||
Entity ejb3Ann, org.hibernate.annotations.Entity hibAnn,
|
Entity ejb3Ann,
|
||||||
XClass annotatedClass, PersistentClass persistentClass,
|
org.hibernate.annotations.Entity hibAnn,
|
||||||
ExtendedMappings mappings
|
XClass annotatedClass,
|
||||||
) {
|
PersistentClass persistentClass,
|
||||||
|
Mappings mappings) {
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
this.persistentClass = persistentClass;
|
this.persistentClass = persistentClass;
|
||||||
this.annotatedClass = annotatedClass;
|
this.annotatedClass = annotatedClass;
|
||||||
|
@ -479,9 +480,12 @@ public class EntityBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void bindTable(
|
public void bindTable(
|
||||||
String schema, String catalog,
|
String schema,
|
||||||
String tableName, List<UniqueConstraintHolder> uniqueConstraints,
|
String catalog,
|
||||||
String constraints, Table denormalizedSuperclassTable) {
|
String tableName,
|
||||||
|
List<UniqueConstraintHolder> uniqueConstraints,
|
||||||
|
String constraints,
|
||||||
|
Table denormalizedSuperclassTable) {
|
||||||
EntityTableObjectNameSource tableNameContext = new EntityTableObjectNameSource( tableName, name );
|
EntityTableObjectNameSource tableNameContext = new EntityTableObjectNameSource( tableName, name );
|
||||||
EntityTableNamingStrategyHelper namingStrategyHelper = new EntityTableNamingStrategyHelper( name );
|
EntityTableNamingStrategyHelper namingStrategyHelper = new EntityTableNamingStrategyHelper( name );
|
||||||
final Table table = TableBinder.buildAndFillTable(
|
final Table table = TableBinder.buildAndFillTable(
|
||||||
|
@ -589,7 +593,7 @@ public class EntityBinder {
|
||||||
bindJoinToPersistentClass( join, ejb3JoinColumns, mappings );
|
bindJoinToPersistentClass( join, ejb3JoinColumns, mappings );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindJoinToPersistentClass(Join join, Ejb3JoinColumn[] ejb3JoinColumns, ExtendedMappings mappings) {
|
private void bindJoinToPersistentClass(Join join, Ejb3JoinColumn[] ejb3JoinColumns, Mappings mappings) {
|
||||||
SimpleValue key = new DependantValue( mappings, join.getTable(), persistentClass.getIdentifier() );
|
SimpleValue key = new DependantValue( mappings, join.getTable(), persistentClass.getIdentifier() );
|
||||||
join.setKey( key );
|
join.setKey( key );
|
||||||
setFKNameIfDefined( join );
|
setFKNameIfDefined( join );
|
||||||
|
|
|
@ -34,7 +34,7 @@ import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.cfg.BinderHelper;
|
import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.Ejb3Column;
|
import org.hibernate.cfg.Ejb3Column;
|
||||||
import org.hibernate.cfg.Ejb3JoinColumn;
|
import org.hibernate.cfg.Ejb3JoinColumn;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.PropertyData;
|
import org.hibernate.cfg.PropertyData;
|
||||||
import org.hibernate.cfg.PropertyInferredData;
|
import org.hibernate.cfg.PropertyInferredData;
|
||||||
import org.hibernate.cfg.WrappedInferredData;
|
import org.hibernate.cfg.WrappedInferredData;
|
||||||
|
@ -55,10 +55,18 @@ public class IdBagBinder extends BagBinder {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean bindStarToManySecondPass(
|
protected boolean bindStarToManySecondPass(
|
||||||
Map persistentClasses, XClass collType, Ejb3JoinColumn[] fkJoinColumns, Ejb3JoinColumn[] keyColumns,
|
Map persistentClasses,
|
||||||
Ejb3JoinColumn[] inverseColumns, Ejb3Column[] elementColumns, boolean isEmbedded, XProperty property,
|
XClass collType,
|
||||||
boolean unique, TableBinder associationTableBinder, boolean ignoreNotFound, ExtendedMappings mappings
|
Ejb3JoinColumn[] fkJoinColumns,
|
||||||
) {
|
Ejb3JoinColumn[] keyColumns,
|
||||||
|
Ejb3JoinColumn[] inverseColumns,
|
||||||
|
Ejb3Column[] elementColumns,
|
||||||
|
boolean isEmbedded,
|
||||||
|
XProperty property,
|
||||||
|
boolean unique,
|
||||||
|
TableBinder associationTableBinder,
|
||||||
|
boolean ignoreNotFound,
|
||||||
|
Mappings mappings) {
|
||||||
boolean result = super.bindStarToManySecondPass(
|
boolean result = super.bindStarToManySecondPass(
|
||||||
persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns, isEmbedded,
|
persistentClasses, collType, fkJoinColumns, keyColumns, inverseColumns, elementColumns, isEmbedded,
|
||||||
property, unique, associationTableBinder, ignoreNotFound, mappings
|
property, unique, associationTableBinder, ignoreNotFound, mappings
|
||||||
|
@ -68,9 +76,14 @@ public class IdBagBinder extends BagBinder {
|
||||||
SimpleValueBinder simpleValue = new SimpleValueBinder();
|
SimpleValueBinder simpleValue = new SimpleValueBinder();
|
||||||
|
|
||||||
PropertyData propertyData = new WrappedInferredData(
|
PropertyData propertyData = new WrappedInferredData(
|
||||||
new PropertyInferredData( null, property, null, //default access should not be useful
|
new PropertyInferredData(
|
||||||
mappings.getReflectionManager() ),
|
null,
|
||||||
"id" );
|
property,
|
||||||
|
null, //default access should not be useful
|
||||||
|
mappings.getReflectionManager()
|
||||||
|
),
|
||||||
|
"id"
|
||||||
|
);
|
||||||
Ejb3Column[] idColumns = Ejb3Column.buildColumnFromAnnotation(
|
Ejb3Column[] idColumns = Ejb3Column.buildColumnFromAnnotation(
|
||||||
collectionIdAnn.columns(),
|
collectionIdAnn.columns(),
|
||||||
null,
|
null,
|
||||||
|
|
|
@ -37,7 +37,7 @@ import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.cfg.CollectionSecondPass;
|
import org.hibernate.cfg.CollectionSecondPass;
|
||||||
import org.hibernate.cfg.Ejb3Column;
|
import org.hibernate.cfg.Ejb3Column;
|
||||||
import org.hibernate.cfg.Ejb3JoinColumn;
|
import org.hibernate.cfg.Ejb3JoinColumn;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
import org.hibernate.cfg.PropertyHolder;
|
||||||
import org.hibernate.cfg.PropertyHolderBuilder;
|
import org.hibernate.cfg.PropertyHolderBuilder;
|
||||||
import org.hibernate.cfg.SecondPass;
|
import org.hibernate.cfg.SecondPass;
|
||||||
|
@ -76,14 +76,19 @@ public class ListBinder extends CollectionBinder {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SecondPass getSecondPass(
|
public SecondPass getSecondPass(
|
||||||
final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
|
final Ejb3JoinColumn[] fkJoinColumns,
|
||||||
|
final Ejb3JoinColumn[] keyColumns,
|
||||||
final Ejb3JoinColumn[] inverseColumns,
|
final Ejb3JoinColumn[] inverseColumns,
|
||||||
final Ejb3Column[] elementColumns,
|
final Ejb3Column[] elementColumns,
|
||||||
Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
|
Ejb3Column[] mapKeyColumns,
|
||||||
final XProperty property, final XClass collType,
|
final Ejb3JoinColumn[] mapKeyManyToManyColumns,
|
||||||
final boolean ignoreNotFound, final boolean unique,
|
final boolean isEmbedded,
|
||||||
final TableBinder assocTableBinder, final ExtendedMappings mappings
|
final XProperty property,
|
||||||
) {
|
final XClass collType,
|
||||||
|
final boolean ignoreNotFound,
|
||||||
|
final boolean unique,
|
||||||
|
final TableBinder assocTableBinder,
|
||||||
|
final Mappings mappings) {
|
||||||
return new CollectionSecondPass( mappings, ListBinder.this.collection ) {
|
return new CollectionSecondPass( mappings, ListBinder.this.collection ) {
|
||||||
public void secondPass(Map persistentClasses, Map inheritedMetas)
|
public void secondPass(Map persistentClasses, Map inheritedMetas)
|
||||||
throws MappingException {
|
throws MappingException {
|
||||||
|
@ -96,7 +101,7 @@ public class ListBinder extends CollectionBinder {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindIndex(final ExtendedMappings mappings) {
|
private void bindIndex(final Mappings mappings) {
|
||||||
if ( !indexColumn.isImplicit() ) {
|
if ( !indexColumn.isImplicit() ) {
|
||||||
PropertyHolder valueHolder = PropertyHolderBuilder.buildPropertyHolder(
|
PropertyHolder valueHolder = PropertyHolderBuilder.buildPropertyHolder(
|
||||||
this.collection,
|
this.collection,
|
||||||
|
|
|
@ -46,7 +46,7 @@ import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.CollectionSecondPass;
|
import org.hibernate.cfg.CollectionSecondPass;
|
||||||
import org.hibernate.cfg.Ejb3Column;
|
import org.hibernate.cfg.Ejb3Column;
|
||||||
import org.hibernate.cfg.Ejb3JoinColumn;
|
import org.hibernate.cfg.Ejb3JoinColumn;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.PropertyData;
|
import org.hibernate.cfg.PropertyData;
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
import org.hibernate.cfg.PropertyHolder;
|
||||||
import org.hibernate.cfg.PropertyHolderBuilder;
|
import org.hibernate.cfg.PropertyHolderBuilder;
|
||||||
|
@ -93,14 +93,19 @@ public class MapBinder extends CollectionBinder {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SecondPass getSecondPass(
|
public SecondPass getSecondPass(
|
||||||
final Ejb3JoinColumn[] fkJoinColumns, final Ejb3JoinColumn[] keyColumns,
|
final Ejb3JoinColumn[] fkJoinColumns,
|
||||||
|
final Ejb3JoinColumn[] keyColumns,
|
||||||
final Ejb3JoinColumn[] inverseColumns,
|
final Ejb3JoinColumn[] inverseColumns,
|
||||||
final Ejb3Column[] elementColumns,
|
final Ejb3Column[] elementColumns,
|
||||||
final Ejb3Column[] mapKeyColumns, final Ejb3JoinColumn[] mapKeyManyToManyColumns, final boolean isEmbedded,
|
final Ejb3Column[] mapKeyColumns,
|
||||||
final XProperty property, final XClass collType,
|
final Ejb3JoinColumn[] mapKeyManyToManyColumns,
|
||||||
final boolean ignoreNotFound, final boolean unique,
|
final boolean isEmbedded,
|
||||||
final TableBinder assocTableBinder, final ExtendedMappings mappings
|
final XProperty property,
|
||||||
) {
|
final XClass collType,
|
||||||
|
final boolean ignoreNotFound,
|
||||||
|
final boolean unique,
|
||||||
|
final TableBinder assocTableBinder,
|
||||||
|
final Mappings mappings) {
|
||||||
return new CollectionSecondPass( mappings, MapBinder.this.collection ) {
|
return new CollectionSecondPass( mappings, MapBinder.this.collection ) {
|
||||||
public void secondPass(Map persistentClasses, Map inheritedMetas)
|
public void secondPass(Map persistentClasses, Map inheritedMetas)
|
||||||
throws MappingException {
|
throws MappingException {
|
||||||
|
@ -118,10 +123,15 @@ public class MapBinder extends CollectionBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindKeyFromAssociationTable(
|
private void bindKeyFromAssociationTable(
|
||||||
XClass collType, Map persistentClasses, String mapKeyPropertyName, XProperty property,
|
XClass collType,
|
||||||
boolean isEmbedded, ExtendedMappings mappings, Ejb3Column[] mapKeyColumns,
|
Map persistentClasses,
|
||||||
Ejb3JoinColumn[] mapKeyManyToManyColumns, String targetPropertyName
|
String mapKeyPropertyName,
|
||||||
) {
|
XProperty property,
|
||||||
|
boolean isEmbedded,
|
||||||
|
Mappings mappings,
|
||||||
|
Ejb3Column[] mapKeyColumns,
|
||||||
|
Ejb3JoinColumn[] mapKeyManyToManyColumns,
|
||||||
|
String targetPropertyName) {
|
||||||
if ( mapKeyPropertyName != null ) {
|
if ( mapKeyPropertyName != null ) {
|
||||||
//this is an EJB3 @MapKey
|
//this is an EJB3 @MapKey
|
||||||
PersistentClass associatedClass = (PersistentClass) persistentClasses.get( collType.getName() );
|
PersistentClass associatedClass = (PersistentClass) persistentClasses.get( collType.getName() );
|
||||||
|
@ -133,7 +143,9 @@ public class MapBinder extends CollectionBinder {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
org.hibernate.mapping.Map map = (org.hibernate.mapping.Map) this.collection;
|
org.hibernate.mapping.Map map = (org.hibernate.mapping.Map) this.collection;
|
||||||
Value indexValue = createFormulatedValue( mapProperty.getValue(), map, targetPropertyName, associatedClass, mappings );
|
Value indexValue = createFormulatedValue(
|
||||||
|
mapProperty.getValue(), map, targetPropertyName, associatedClass, mappings
|
||||||
|
);
|
||||||
map.setIndex( indexValue );
|
map.setIndex( indexValue );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -305,7 +317,7 @@ public class MapBinder extends CollectionBinder {
|
||||||
Collection collection,
|
Collection collection,
|
||||||
String targetPropertyName,
|
String targetPropertyName,
|
||||||
PersistentClass associatedClass,
|
PersistentClass associatedClass,
|
||||||
ExtendedMappings mappings) {
|
Mappings mappings) {
|
||||||
Value element = collection.getElement();
|
Value element = collection.getElement();
|
||||||
String fromAndWhere = null;
|
String fromAndWhere = null;
|
||||||
if ( !( element instanceof OneToMany ) ) {
|
if ( !( element instanceof OneToMany ) ) {
|
||||||
|
|
|
@ -43,8 +43,8 @@ import org.hibernate.cfg.AccessType;
|
||||||
import org.hibernate.cfg.AnnotationBinder;
|
import org.hibernate.cfg.AnnotationBinder;
|
||||||
import org.hibernate.cfg.BinderHelper;
|
import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.Ejb3Column;
|
import org.hibernate.cfg.Ejb3Column;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
|
||||||
import org.hibernate.cfg.InheritanceState;
|
import org.hibernate.cfg.InheritanceState;
|
||||||
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
import org.hibernate.cfg.PropertyHolder;
|
||||||
import org.hibernate.cfg.PropertyPreloadedData;
|
import org.hibernate.cfg.PropertyPreloadedData;
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
|
@ -67,7 +67,7 @@ public class PropertyBinder {
|
||||||
private AccessType accessType;
|
private AccessType accessType;
|
||||||
private Ejb3Column[] columns;
|
private Ejb3Column[] columns;
|
||||||
private PropertyHolder holder;
|
private PropertyHolder holder;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private Value value;
|
private Value value;
|
||||||
private boolean insertable = true;
|
private boolean insertable = true;
|
||||||
private boolean updatable = true;
|
private boolean updatable = true;
|
||||||
|
@ -145,7 +145,7 @@ public class PropertyBinder {
|
||||||
this.cascade = cascadeStrategy;
|
this.cascade = cascadeStrategy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMappings(ExtendedMappings mappings) {
|
public void setMappings(Mappings mappings) {
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ import org.hibernate.LockMode;
|
||||||
import org.hibernate.annotations.CacheModeType;
|
import org.hibernate.annotations.CacheModeType;
|
||||||
import org.hibernate.annotations.FlushModeType;
|
import org.hibernate.annotations.FlushModeType;
|
||||||
import org.hibernate.cfg.BinderHelper;
|
import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.NotYetImplementedException;
|
import org.hibernate.cfg.NotYetImplementedException;
|
||||||
import org.hibernate.engine.NamedQueryDefinition;
|
import org.hibernate.engine.NamedQueryDefinition;
|
||||||
import org.hibernate.engine.NamedSQLQueryDefinition;
|
import org.hibernate.engine.NamedSQLQueryDefinition;
|
||||||
|
@ -57,7 +57,7 @@ import org.slf4j.LoggerFactory;
|
||||||
public abstract class QueryBinder {
|
public abstract class QueryBinder {
|
||||||
private static final Logger log = LoggerFactory.getLogger( QueryBinder.class );
|
private static final Logger log = LoggerFactory.getLogger( QueryBinder.class );
|
||||||
|
|
||||||
public static void bindQuery(NamedQuery queryAnn, ExtendedMappings mappings, boolean isDefault) {
|
public static void bindQuery(NamedQuery queryAnn, Mappings mappings, boolean isDefault) {
|
||||||
if ( queryAnn == null ) return;
|
if ( queryAnn == null ) return;
|
||||||
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
||||||
throw new AnnotationException( "A named query must have a name when used in class or package level" );
|
throw new AnnotationException( "A named query must have a name when used in class or package level" );
|
||||||
|
@ -87,7 +87,7 @@ public abstract class QueryBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void bindNativeQuery(NamedNativeQuery queryAnn, ExtendedMappings mappings, boolean isDefault) {
|
public static void bindNativeQuery(NamedNativeQuery queryAnn, Mappings mappings, boolean isDefault) {
|
||||||
if ( queryAnn == null ) return;
|
if ( queryAnn == null ) return;
|
||||||
//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
|
//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
|
||||||
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
||||||
|
@ -148,7 +148,7 @@ public abstract class QueryBinder {
|
||||||
log.info( "Binding named native query: {} => {}", queryAnn.name(), queryAnn.query() );
|
log.info( "Binding named native query: {} => {}", queryAnn.name(), queryAnn.query() );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindNativeQuery(org.hibernate.annotations.NamedNativeQuery queryAnn, ExtendedMappings mappings) {
|
public static void bindNativeQuery(org.hibernate.annotations.NamedNativeQuery queryAnn, Mappings mappings) {
|
||||||
if ( queryAnn == null ) return;
|
if ( queryAnn == null ) return;
|
||||||
//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
|
//ResultSetMappingDefinition mappingDefinition = mappings.getResultSetMapping( queryAnn.resultSetMapping() );
|
||||||
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
||||||
|
@ -202,14 +202,14 @@ public abstract class QueryBinder {
|
||||||
log.info( "Binding named native query: {} => {}", queryAnn.name(), queryAnn.query() );
|
log.info( "Binding named native query: {} => {}", queryAnn.name(), queryAnn.query() );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindQueries(NamedQueries queriesAnn, ExtendedMappings mappings, boolean isDefault) {
|
public static void bindQueries(NamedQueries queriesAnn, Mappings mappings, boolean isDefault) {
|
||||||
if ( queriesAnn == null ) return;
|
if ( queriesAnn == null ) return;
|
||||||
for (NamedQuery q : queriesAnn.value()) {
|
for (NamedQuery q : queriesAnn.value()) {
|
||||||
bindQuery( q, mappings, isDefault );
|
bindQuery( q, mappings, isDefault );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindNativeQueries(NamedNativeQueries queriesAnn, ExtendedMappings mappings, boolean isDefault) {
|
public static void bindNativeQueries(NamedNativeQueries queriesAnn, Mappings mappings, boolean isDefault) {
|
||||||
if ( queriesAnn == null ) return;
|
if ( queriesAnn == null ) return;
|
||||||
for (NamedNativeQuery q : queriesAnn.value()) {
|
for (NamedNativeQuery q : queriesAnn.value()) {
|
||||||
bindNativeQuery( q, mappings, isDefault );
|
bindNativeQuery( q, mappings, isDefault );
|
||||||
|
@ -217,7 +217,7 @@ public abstract class QueryBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindNativeQueries(
|
public static void bindNativeQueries(
|
||||||
org.hibernate.annotations.NamedNativeQueries queriesAnn, ExtendedMappings mappings
|
org.hibernate.annotations.NamedNativeQueries queriesAnn, Mappings mappings
|
||||||
) {
|
) {
|
||||||
if ( queriesAnn == null ) return;
|
if ( queriesAnn == null ) return;
|
||||||
for (org.hibernate.annotations.NamedNativeQuery q : queriesAnn.value()) {
|
for (org.hibernate.annotations.NamedNativeQuery q : queriesAnn.value()) {
|
||||||
|
@ -225,7 +225,7 @@ public abstract class QueryBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindQuery(org.hibernate.annotations.NamedQuery queryAnn, ExtendedMappings mappings) {
|
public static void bindQuery(org.hibernate.annotations.NamedQuery queryAnn, Mappings mappings) {
|
||||||
if ( queryAnn == null ) return;
|
if ( queryAnn == null ) return;
|
||||||
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
if ( BinderHelper.isDefault( queryAnn.name() ) ) {
|
||||||
throw new AnnotationException( "A named query must have a name when used in class or package level" );
|
throw new AnnotationException( "A named query must have a name when used in class or package level" );
|
||||||
|
@ -296,14 +296,14 @@ public abstract class QueryBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void bindQueries(org.hibernate.annotations.NamedQueries queriesAnn, ExtendedMappings mappings) {
|
public static void bindQueries(org.hibernate.annotations.NamedQueries queriesAnn, Mappings mappings) {
|
||||||
if ( queriesAnn == null ) return;
|
if ( queriesAnn == null ) return;
|
||||||
for (org.hibernate.annotations.NamedQuery q : queriesAnn.value()) {
|
for (org.hibernate.annotations.NamedQuery q : queriesAnn.value()) {
|
||||||
bindQuery( q, mappings );
|
bindQuery( q, mappings );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindSqlResultsetMappings(SqlResultSetMappings ann, ExtendedMappings mappings, boolean isDefault) {
|
public static void bindSqlResultsetMappings(SqlResultSetMappings ann, Mappings mappings, boolean isDefault) {
|
||||||
if ( ann == null ) return;
|
if ( ann == null ) return;
|
||||||
for (SqlResultSetMapping rs : ann.value()) {
|
for (SqlResultSetMapping rs : ann.value()) {
|
||||||
//no need to handle inSecondPass
|
//no need to handle inSecondPass
|
||||||
|
@ -311,7 +311,7 @@ public abstract class QueryBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindSqlResultsetMapping(SqlResultSetMapping ann, ExtendedMappings mappings, boolean isDefault) {
|
public static void bindSqlResultsetMapping(SqlResultSetMapping ann, Mappings mappings, boolean isDefault) {
|
||||||
//no need to handle inSecondPass
|
//no need to handle inSecondPass
|
||||||
mappings.addSecondPass( new ResultsetMappingSecondPass( ann, mappings, isDefault ) );
|
mappings.addSecondPass( new ResultsetMappingSecondPass( ann, mappings, isDefault ) );
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ import javax.persistence.SqlResultSetMapping;
|
||||||
import org.hibernate.LockMode;
|
import org.hibernate.LockMode;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.BinderHelper;
|
import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.QuerySecondPass;
|
import org.hibernate.cfg.QuerySecondPass;
|
||||||
import org.hibernate.engine.ResultSetMappingDefinition;
|
import org.hibernate.engine.ResultSetMappingDefinition;
|
||||||
import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
|
import org.hibernate.engine.query.sql.NativeSQLQueryRootReturn;
|
||||||
|
@ -58,10 +58,10 @@ import org.slf4j.LoggerFactory;
|
||||||
public class ResultsetMappingSecondPass implements QuerySecondPass {
|
public class ResultsetMappingSecondPass implements QuerySecondPass {
|
||||||
private Logger log = LoggerFactory.getLogger( ResultsetMappingSecondPass.class );
|
private Logger log = LoggerFactory.getLogger( ResultsetMappingSecondPass.class );
|
||||||
private SqlResultSetMapping ann;
|
private SqlResultSetMapping ann;
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private boolean isDefault;
|
private boolean isDefault;
|
||||||
|
|
||||||
public ResultsetMappingSecondPass(SqlResultSetMapping ann, ExtendedMappings mappings, boolean isDefault) {
|
public ResultsetMappingSecondPass(SqlResultSetMapping ann, Mappings mappings, boolean isDefault) {
|
||||||
this.ann = ann;
|
this.ann = ann;
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
this.isDefault = isDefault;
|
this.isDefault = isDefault;
|
||||||
|
|
|
@ -48,7 +48,7 @@ import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.cfg.BinderHelper;
|
import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.Ejb3Column;
|
import org.hibernate.cfg.Ejb3Column;
|
||||||
import org.hibernate.cfg.Ejb3JoinColumn;
|
import org.hibernate.cfg.Ejb3JoinColumn;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.cfg.NotYetImplementedException;
|
import org.hibernate.cfg.NotYetImplementedException;
|
||||||
import org.hibernate.cfg.PkDrivenByDefaultMapsIdSecondPass;
|
import org.hibernate.cfg.PkDrivenByDefaultMapsIdSecondPass;
|
||||||
import org.hibernate.cfg.SetSimpleValueTypeSecondPass;
|
import org.hibernate.cfg.SetSimpleValueTypeSecondPass;
|
||||||
|
@ -72,7 +72,7 @@ public class SimpleValueBinder {
|
||||||
private String persistentClassName;
|
private String persistentClassName;
|
||||||
private String explicitType = "";
|
private String explicitType = "";
|
||||||
private Properties typeParameters = new Properties();
|
private Properties typeParameters = new Properties();
|
||||||
private ExtendedMappings mappings;
|
private Mappings mappings;
|
||||||
private Table table;
|
private Table table;
|
||||||
private SimpleValue simpleValue;
|
private SimpleValue simpleValue;
|
||||||
private boolean isVersion;
|
private boolean isVersion;
|
||||||
|
@ -278,7 +278,7 @@ public class SimpleValueBinder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMappings(ExtendedMappings mappings) {
|
public void setMappings(Mappings mappings) {
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,11 +31,11 @@ import javax.persistence.UniqueConstraint;
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.annotations.Index;
|
import org.hibernate.annotations.Index;
|
||||||
|
import org.hibernate.cfg.Mappings;
|
||||||
import org.hibernate.util.StringHelper;
|
import org.hibernate.util.StringHelper;
|
||||||
import org.hibernate.util.CollectionHelper;
|
import org.hibernate.util.CollectionHelper;
|
||||||
import org.hibernate.cfg.BinderHelper;
|
import org.hibernate.cfg.BinderHelper;
|
||||||
import org.hibernate.cfg.Ejb3JoinColumn;
|
import org.hibernate.cfg.Ejb3JoinColumn;
|
||||||
import org.hibernate.cfg.ExtendedMappings;
|
|
||||||
import org.hibernate.cfg.IndexOrUniqueKeySecondPass;
|
import org.hibernate.cfg.IndexOrUniqueKeySecondPass;
|
||||||
import org.hibernate.cfg.ObjectNameNormalizer;
|
import org.hibernate.cfg.ObjectNameNormalizer;
|
||||||
import org.hibernate.cfg.ObjectNameSource;
|
import org.hibernate.cfg.ObjectNameSource;
|
||||||
|
@ -71,7 +71,7 @@ public class TableBinder {
|
||||||
// private List<String[]> uniqueConstraints;
|
// private List<String[]> uniqueConstraints;
|
||||||
String constraints;
|
String constraints;
|
||||||
Table denormalizedSuperTable;
|
Table denormalizedSuperTable;
|
||||||
ExtendedMappings mappings;
|
Mappings mappings;
|
||||||
private String ownerEntityTable;
|
private String ownerEntityTable;
|
||||||
private String associatedEntityTable;
|
private String associatedEntityTable;
|
||||||
private String propertyName;
|
private String propertyName;
|
||||||
|
@ -111,7 +111,7 @@ public class TableBinder {
|
||||||
this.denormalizedSuperTable = denormalizedSuperTable;
|
this.denormalizedSuperTable = denormalizedSuperTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMappings(ExtendedMappings mappings) {
|
public void setMappings(Mappings mappings) {
|
||||||
this.mappings = mappings;
|
this.mappings = mappings;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ public class TableBinder {
|
||||||
List<UniqueConstraintHolder> uniqueConstraints,
|
List<UniqueConstraintHolder> uniqueConstraints,
|
||||||
String constraints,
|
String constraints,
|
||||||
Table denormalizedSuperTable,
|
Table denormalizedSuperTable,
|
||||||
ExtendedMappings mappings,
|
Mappings mappings,
|
||||||
String subselect) {
|
String subselect) {
|
||||||
schema = BinderHelper.isDefault( schema ) ? mappings.getSchemaName() : schema;
|
schema = BinderHelper.isDefault( schema ) ? mappings.getSchemaName() : schema;
|
||||||
catalog = BinderHelper.isDefault( catalog ) ? mappings.getCatalogName() : catalog;
|
catalog = BinderHelper.isDefault( catalog ) ? mappings.getCatalogName() : catalog;
|
||||||
|
@ -273,9 +273,15 @@ public class TableBinder {
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings({ "JavaDoc" })
|
@SuppressWarnings({ "JavaDoc" })
|
||||||
public static Table fillTable(
|
public static Table fillTable(
|
||||||
String schema, String catalog, String realTableName, String logicalName, boolean isAbstract,
|
String schema,
|
||||||
List uniqueConstraints, String constraints, Table denormalizedSuperTable, ExtendedMappings mappings
|
String catalog,
|
||||||
) {
|
String realTableName,
|
||||||
|
String logicalName,
|
||||||
|
boolean isAbstract,
|
||||||
|
List uniqueConstraints,
|
||||||
|
String constraints,
|
||||||
|
Table denormalizedSuperTable,
|
||||||
|
Mappings mappings) {
|
||||||
schema = BinderHelper.isDefault( schema ) ? mappings.getSchemaName() : schema;
|
schema = BinderHelper.isDefault( schema ) ? mappings.getSchemaName() : schema;
|
||||||
catalog = BinderHelper.isDefault( catalog ) ? mappings.getCatalogName() : catalog;
|
catalog = BinderHelper.isDefault( catalog ) ? mappings.getCatalogName() : catalog;
|
||||||
Table table;
|
Table table;
|
||||||
|
@ -310,10 +316,12 @@ public class TableBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void bindFk(
|
public static void bindFk(
|
||||||
PersistentClass referencedEntity, PersistentClass destinationEntity, Ejb3JoinColumn[] columns,
|
PersistentClass referencedEntity,
|
||||||
|
PersistentClass destinationEntity,
|
||||||
|
Ejb3JoinColumn[] columns,
|
||||||
SimpleValue value,
|
SimpleValue value,
|
||||||
boolean unique, ExtendedMappings mappings
|
boolean unique,
|
||||||
) {
|
Mappings mappings) {
|
||||||
PersistentClass associatedClass;
|
PersistentClass associatedClass;
|
||||||
if ( destinationEntity != null ) {
|
if ( destinationEntity != null ) {
|
||||||
//overridden destination
|
//overridden destination
|
||||||
|
@ -478,8 +486,10 @@ public class TableBinder {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void linkJoinColumnWithValueOverridingNameIfImplicit(
|
public static void linkJoinColumnWithValueOverridingNameIfImplicit(
|
||||||
PersistentClass referencedEntity, Iterator columnIterator, Ejb3JoinColumn[] columns, SimpleValue value
|
PersistentClass referencedEntity,
|
||||||
) {
|
Iterator columnIterator,
|
||||||
|
Ejb3JoinColumn[] columns,
|
||||||
|
SimpleValue value) {
|
||||||
for (Ejb3JoinColumn joinCol : columns) {
|
for (Ejb3JoinColumn joinCol : columns) {
|
||||||
Column synthCol = (Column) columnIterator.next();
|
Column synthCol = (Column) columnIterator.next();
|
||||||
if ( joinCol.isNameDeferred() ) {
|
if ( joinCol.isNameDeferred() ) {
|
||||||
|
@ -502,7 +512,7 @@ public class TableBinder {
|
||||||
value.getTable().createUniqueKey( cols );
|
value.getTable().createUniqueKey( cols );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addIndexes(Table hibTable, Index[] indexes, ExtendedMappings mappings) {
|
public static void addIndexes(Table hibTable, Index[] indexes, Mappings mappings) {
|
||||||
for (Index index : indexes) {
|
for (Index index : indexes) {
|
||||||
//no need to handle inSecondPass here since it is only called from EntityBinder
|
//no need to handle inSecondPass here since it is only called from EntityBinder
|
||||||
mappings.addSecondPass(
|
mappings.addSecondPass(
|
||||||
|
|
Loading…
Reference in New Issue