HHH-15799 - API/internal split for org.hibernate.cfg package
This commit is contained in:
parent
023e73cb46
commit
3f7dd8c23b
|
@ -502,9 +502,6 @@ checkstyle {
|
||||||
|
|
||||||
// exclude generated java sources - by explicitly setting the base source dir
|
// exclude generated java sources - by explicitly setting the base source dir
|
||||||
tasks.checkstyleMain.source = 'src/main/java'
|
tasks.checkstyleMain.source = 'src/main/java'
|
||||||
// because cfg package is a mess mainly from annotation stuff
|
|
||||||
tasks.checkstyleMain.exclude '**/org/hibernate/cfg/**'
|
|
||||||
tasks.checkstyleMain.exclude '**/org/hibernate/cfg/*'
|
|
||||||
|
|
||||||
// define a second checkstyle task for checking non-fatal violations
|
// define a second checkstyle task for checking non-fatal violations
|
||||||
task nonFatalCheckstyle(type:Checkstyle) {
|
task nonFatalCheckstyle(type:Checkstyle) {
|
||||||
|
|
|
@ -6,13 +6,25 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.annotations;
|
package org.hibernate.annotations;
|
||||||
|
|
||||||
|
import java.lang.annotation.Inherited;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
import org.hibernate.usertype.UserType;
|
import org.hibernate.usertype.UserType;
|
||||||
|
|
||||||
|
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
|
||||||
|
import static java.lang.annotation.ElementType.FIELD;
|
||||||
|
import static java.lang.annotation.ElementType.METHOD;
|
||||||
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Form of {@link Type} for use with map-keys
|
* Form of {@link Type} for use with map-keys
|
||||||
*
|
*
|
||||||
* @since 6.0
|
* @since 6.0
|
||||||
*/
|
*/
|
||||||
|
@Target({METHOD, FIELD, ANNOTATION_TYPE})
|
||||||
|
@Inherited
|
||||||
|
@Retention(RUNTIME)
|
||||||
public @interface MapKeyType {
|
public @interface MapKeyType {
|
||||||
/**
|
/**
|
||||||
* The custom type implementor class
|
* The custom type implementor class
|
||||||
|
|
|
@ -7,12 +7,12 @@
|
||||||
package org.hibernate.boot;
|
package org.hibernate.boot;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Models the definition of caching settings for a particular region. Generally as found in either:<ul>
|
* Models the definition of caching settings for a particular region. Generally found in:<ul>
|
||||||
* <li>{@code cfg.xml}</li>
|
* <li>{@code cfg.xml}</li>
|
||||||
|
* <li>annotations</li>
|
||||||
|
* <li>{@code orm.xml}</li>
|
||||||
* <li>{@code hbm.xml}</li>
|
* <li>{@code hbm.xml}</li>
|
||||||
* <li>annotation</li>
|
|
||||||
* </ul>
|
* </ul>
|
||||||
* Though certainly other custom sources are acceptable too.
|
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -13,13 +13,13 @@ import java.util.function.Consumer;
|
||||||
|
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
||||||
|
import org.hibernate.boot.model.NamedEntityGraphDefinition;
|
||||||
import org.hibernate.boot.model.TypeDefinition;
|
import org.hibernate.boot.model.TypeDefinition;
|
||||||
import org.hibernate.boot.model.relational.Database;
|
import org.hibernate.boot.model.relational.Database;
|
||||||
import org.hibernate.boot.query.NamedHqlQueryDefinition;
|
import org.hibernate.boot.query.NamedHqlQueryDefinition;
|
||||||
import org.hibernate.boot.query.NamedNativeQueryDefinition;
|
import org.hibernate.boot.query.NamedNativeQueryDefinition;
|
||||||
import org.hibernate.boot.query.NamedProcedureCallDefinition;
|
import org.hibernate.boot.query.NamedProcedureCallDefinition;
|
||||||
import org.hibernate.boot.query.NamedResultSetMappingDescriptor;
|
import org.hibernate.boot.query.NamedResultSetMappingDescriptor;
|
||||||
import org.hibernate.cfg.annotations.NamedEntityGraphDefinition;
|
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
import org.hibernate.engine.spi.Mapping;
|
import org.hibernate.engine.spi.Mapping;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
|
|
|
@ -357,7 +357,10 @@ public interface MetadataBuilder {
|
||||||
* @return {@code this} for method chaining
|
* @return {@code this} for method chaining
|
||||||
*
|
*
|
||||||
* @see org.hibernate.cfg.AvailableSettings#ARTIFACT_PROCESSING_ORDER
|
* @see org.hibernate.cfg.AvailableSettings#ARTIFACT_PROCESSING_ORDER
|
||||||
|
*
|
||||||
|
* @deprecated {@code hbm.xml} mappings are no longer supported, making this irrelevant
|
||||||
*/
|
*/
|
||||||
|
@Deprecated(since = "6", forRemoval = true)
|
||||||
MetadataBuilder applySourceProcessOrdering(MetadataSourceType... sourceTypes);
|
MetadataBuilder applySourceProcessOrdering(MetadataSourceType... sourceTypes);
|
||||||
|
|
||||||
MetadataBuilder applySqlFunction(String functionName, SqmFunctionDescriptor function);
|
MetadataBuilder applySqlFunction(String functionName, SqmFunctionDescriptor function);
|
||||||
|
|
|
@ -17,7 +17,6 @@ import java.util.HashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.Internal;
|
import org.hibernate.Internal;
|
||||||
|
|
|
@ -11,6 +11,8 @@ import java.net.URL;
|
||||||
/**
|
/**
|
||||||
* Abstraction for locating class-path resources
|
* Abstraction for locating class-path resources
|
||||||
*
|
*
|
||||||
|
* @see ResourceStreamLocator
|
||||||
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
|
|
|
@ -11,6 +11,8 @@ import java.io.InputStream;
|
||||||
/**
|
/**
|
||||||
* Abstraction for locating class-path resources
|
* Abstraction for locating class-path resources
|
||||||
*
|
*
|
||||||
|
* @see ResourceLocator
|
||||||
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
@FunctionalInterface
|
@FunctionalInterface
|
||||||
|
|
|
@ -9,6 +9,8 @@ package org.hibernate.boot;
|
||||||
import org.hibernate.boot.jaxb.Origin;
|
import org.hibernate.boot.jaxb.Origin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Specialized exception indicating that an unsupported {@code orm.xml} XSD version was specified
|
||||||
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
public class UnsupportedOrmXsdVersionException extends MappingException {
|
public class UnsupportedOrmXsdVersionException extends MappingException {
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.hibernate.boot.archive.scan.spi.Scanner;
|
||||||
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;
|
import org.hibernate.boot.archive.spi.ArchiveDescriptorFactory;
|
||||||
import org.hibernate.boot.model.TypeBeanInstanceProducer;
|
import org.hibernate.boot.model.TypeBeanInstanceProducer;
|
||||||
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
||||||
|
import org.hibernate.boot.model.internal.JPAXMLOverriddenMetadataProvider;
|
||||||
import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject;
|
import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||||
|
@ -31,7 +32,6 @@ import org.hibernate.boot.spi.BootstrapContext;
|
||||||
import org.hibernate.boot.spi.ClassLoaderAccess;
|
import org.hibernate.boot.spi.ClassLoaderAccess;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.cfg.annotations.reflection.internal.JPAXMLOverriddenMetadataProvider;
|
|
||||||
import org.hibernate.engine.config.spi.ConfigurationService;
|
import org.hibernate.engine.config.spi.ConfigurationService;
|
||||||
import org.hibernate.jpa.internal.MutableJpaComplianceImpl;
|
import org.hibernate.jpa.internal.MutableJpaComplianceImpl;
|
||||||
import org.hibernate.jpa.spi.MutableJpaCompliance;
|
import org.hibernate.jpa.spi.MutableJpaCompliance;
|
||||||
|
@ -126,7 +126,7 @@ public class BootstrapContextImpl implements BootstrapContext {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BeanInstanceProducer getBeanInstanceProducer() {
|
public BeanInstanceProducer getCustomTypeProducer() {
|
||||||
return beanInstanceProducer;
|
return beanInstanceProducer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.boot.CacheRegionDefinition;
|
import org.hibernate.boot.CacheRegionDefinition;
|
||||||
import org.hibernate.boot.SessionFactoryBuilder;
|
import org.hibernate.boot.SessionFactoryBuilder;
|
||||||
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
||||||
|
import org.hibernate.boot.model.NamedEntityGraphDefinition;
|
||||||
import org.hibernate.boot.model.TypeDefinition;
|
import org.hibernate.boot.model.TypeDefinition;
|
||||||
import org.hibernate.boot.model.TypeDefinitionRegistry;
|
import org.hibernate.boot.model.TypeDefinitionRegistry;
|
||||||
import org.hibernate.boot.model.TypeDefinitionRegistryStandardImpl;
|
import org.hibernate.boot.model.TypeDefinitionRegistryStandardImpl;
|
||||||
|
@ -42,6 +43,17 @@ import org.hibernate.boot.model.convert.spi.ConverterAutoApplyHandler;
|
||||||
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
||||||
import org.hibernate.boot.model.convert.spi.ConverterRegistry;
|
import org.hibernate.boot.model.convert.spi.ConverterRegistry;
|
||||||
import org.hibernate.boot.model.convert.spi.RegisteredConversion;
|
import org.hibernate.boot.model.convert.spi.RegisteredConversion;
|
||||||
|
import org.hibernate.boot.model.internal.AggregateComponentSecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.AnnotatedClassType;
|
||||||
|
import org.hibernate.boot.model.internal.CreateKeySecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.FkSecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.IdGeneratorResolverSecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.JPAIndexHolder;
|
||||||
|
import org.hibernate.boot.model.internal.QuerySecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.SecondaryTableFromAnnotationSecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.SecondaryTableSecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.SetBasicValueTypeSecondPass;
|
||||||
|
import org.hibernate.boot.model.internal.UniqueConstraintHolder;
|
||||||
import org.hibernate.boot.model.naming.Identifier;
|
import org.hibernate.boot.model.naming.Identifier;
|
||||||
import org.hibernate.boot.model.naming.ImplicitForeignKeyNameSource;
|
import org.hibernate.boot.model.naming.ImplicitForeignKeyNameSource;
|
||||||
import org.hibernate.boot.model.naming.ImplicitIndexNameSource;
|
import org.hibernate.boot.model.naming.ImplicitIndexNameSource;
|
||||||
|
@ -62,25 +74,14 @@ import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
||||||
import org.hibernate.boot.spi.NaturalIdUniqueKeyBinder;
|
import org.hibernate.boot.spi.NaturalIdUniqueKeyBinder;
|
||||||
import org.hibernate.cfg.AggregateComponentSecondPass;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.cfg.AnnotatedClassType;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.cfg.CreateKeySecondPass;
|
|
||||||
import org.hibernate.cfg.FkSecondPass;
|
|
||||||
import org.hibernate.cfg.IdGeneratorResolverSecondPass;
|
|
||||||
import org.hibernate.cfg.JPAIndexHolder;
|
|
||||||
import org.hibernate.cfg.PropertyData;
|
|
||||||
import org.hibernate.cfg.QuerySecondPass;
|
|
||||||
import org.hibernate.cfg.RecoverableException;
|
import org.hibernate.cfg.RecoverableException;
|
||||||
import org.hibernate.cfg.SecondPass;
|
|
||||||
import org.hibernate.cfg.SecondaryTableFromAnnotationSecondPass;
|
|
||||||
import org.hibernate.cfg.SecondaryTableSecondPass;
|
|
||||||
import org.hibernate.cfg.SetBasicValueTypeSecondPass;
|
|
||||||
import org.hibernate.cfg.UniqueConstraintHolder;
|
|
||||||
import org.hibernate.cfg.annotations.NamedEntityGraphDefinition;
|
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
|
import org.hibernate.generator.Generator;
|
||||||
import org.hibernate.internal.CoreLogging;
|
import org.hibernate.internal.CoreLogging;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
|
@ -105,17 +106,16 @@ import org.hibernate.metamodel.CollectionClassification;
|
||||||
import org.hibernate.metamodel.spi.EmbeddableInstantiator;
|
import org.hibernate.metamodel.spi.EmbeddableInstantiator;
|
||||||
import org.hibernate.query.named.NamedObjectRepository;
|
import org.hibernate.query.named.NamedObjectRepository;
|
||||||
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
|
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
|
||||||
import org.hibernate.generator.Generator;
|
|
||||||
import org.hibernate.type.descriptor.java.JavaType;
|
import org.hibernate.type.descriptor.java.JavaType;
|
||||||
import org.hibernate.type.descriptor.jdbc.JdbcType;
|
import org.hibernate.type.descriptor.jdbc.JdbcType;
|
||||||
import org.hibernate.type.spi.TypeConfiguration;
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
import org.hibernate.usertype.CompositeUserType;
|
import org.hibernate.usertype.CompositeUserType;
|
||||||
|
import org.hibernate.usertype.UserType;
|
||||||
|
|
||||||
import jakarta.persistence.AttributeConverter;
|
import jakarta.persistence.AttributeConverter;
|
||||||
import jakarta.persistence.Embeddable;
|
import jakarta.persistence.Embeddable;
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import jakarta.persistence.MapsId;
|
import jakarta.persistence.MapsId;
|
||||||
import org.hibernate.usertype.UserType;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The implementation of the {@linkplain InFlightMetadataCollector in-flight
|
* The implementation of the {@linkplain InFlightMetadataCollector in-flight
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.hibernate.MappingException;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.boot.SessionFactoryBuilder;
|
import org.hibernate.boot.SessionFactoryBuilder;
|
||||||
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
||||||
|
import org.hibernate.boot.model.NamedEntityGraphDefinition;
|
||||||
import org.hibernate.boot.model.TypeDefinition;
|
import org.hibernate.boot.model.TypeDefinition;
|
||||||
import org.hibernate.boot.model.relational.ColumnOrderingStrategy;
|
import org.hibernate.boot.model.relational.ColumnOrderingStrategy;
|
||||||
import org.hibernate.boot.model.relational.ColumnOrderingStrategyLegacy;
|
import org.hibernate.boot.model.relational.ColumnOrderingStrategyLegacy;
|
||||||
|
@ -41,7 +42,6 @@ import org.hibernate.boot.spi.SessionFactoryBuilderFactory;
|
||||||
import org.hibernate.boot.spi.SessionFactoryBuilderImplementor;
|
import org.hibernate.boot.spi.SessionFactoryBuilderImplementor;
|
||||||
import org.hibernate.boot.spi.SessionFactoryBuilderService;
|
import org.hibernate.boot.spi.SessionFactoryBuilderService;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.cfg.annotations.NamedEntityGraphDefinition;
|
|
||||||
import org.hibernate.engine.config.spi.ConfigurationService;
|
import org.hibernate.engine.config.spi.ConfigurationService;
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
|
|
|
@ -15,8 +15,8 @@ import java.util.Set;
|
||||||
import org.hibernate.CacheMode;
|
import org.hibernate.CacheMode;
|
||||||
import org.hibernate.FlushMode;
|
import org.hibernate.FlushMode;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
|
import org.hibernate.boot.model.internal.QueryHintDefinition;
|
||||||
import org.hibernate.boot.query.NamedProcedureCallDefinition;
|
import org.hibernate.boot.query.NamedProcedureCallDefinition;
|
||||||
import org.hibernate.cfg.annotations.QueryHintDefinition;
|
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.procedure.internal.NamedCallableQueryMementoImpl;
|
import org.hibernate.procedure.internal.NamedCallableQueryMementoImpl;
|
||||||
|
|
|
@ -37,7 +37,6 @@ import org.hibernate.cache.internal.StandardTimestampsCacheFactory;
|
||||||
import org.hibernate.cache.spi.RegionFactory;
|
import org.hibernate.cache.spi.RegionFactory;
|
||||||
import org.hibernate.cache.spi.TimestampsCacheFactory;
|
import org.hibernate.cache.spi.TimestampsCacheFactory;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.cfg.BaselineSessionEventsListenerBuilder;
|
|
||||||
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
|
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.engine.config.internal.ConfigurationServiceImpl;
|
import org.hibernate.engine.config.internal.ConfigurationServiceImpl;
|
||||||
|
@ -46,6 +45,7 @@ import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
|
||||||
import org.hibernate.engine.jdbc.env.spi.ExtractedDatabaseMetaData;
|
import org.hibernate.engine.jdbc.env.spi.ExtractedDatabaseMetaData;
|
||||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
import org.hibernate.id.uuid.LocalObjectUuidHelper;
|
import org.hibernate.id.uuid.LocalObjectUuidHelper;
|
||||||
|
import org.hibernate.internal.BaselineSessionEventsListenerBuilder;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.EmptyInterceptor;
|
import org.hibernate.internal.EmptyInterceptor;
|
||||||
import org.hibernate.internal.util.NullnessHelper;
|
import org.hibernate.internal.util.NullnessHelper;
|
||||||
|
@ -57,9 +57,9 @@ import org.hibernate.jpa.spi.MutableJpaCompliance;
|
||||||
import org.hibernate.loader.BatchFetchStyle;
|
import org.hibernate.loader.BatchFetchStyle;
|
||||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||||
import org.hibernate.query.ImmutableEntityUpdateQueryHandlingMode;
|
import org.hibernate.query.ImmutableEntityUpdateQueryHandlingMode;
|
||||||
import org.hibernate.query.sqm.NullPrecedence;
|
|
||||||
import org.hibernate.query.criteria.ValueHandlingMode;
|
import org.hibernate.query.criteria.ValueHandlingMode;
|
||||||
import org.hibernate.query.hql.HqlTranslator;
|
import org.hibernate.query.hql.HqlTranslator;
|
||||||
|
import org.hibernate.query.sqm.NullPrecedence;
|
||||||
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
|
import org.hibernate.query.sqm.function.SqmFunctionDescriptor;
|
||||||
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
|
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
|
||||||
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableInsertStrategy;
|
import org.hibernate.query.sqm.mutation.spi.SqmMultiTableInsertStrategy;
|
||||||
|
@ -71,9 +71,9 @@ import org.hibernate.resource.transaction.spi.TransactionCoordinatorBuilder;
|
||||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||||
import org.hibernate.stat.Statistics;
|
import org.hibernate.stat.Statistics;
|
||||||
import org.hibernate.type.FormatMapper;
|
import org.hibernate.type.FormatMapper;
|
||||||
import org.hibernate.type.jaxb.JaxbXmlFormatMapper;
|
|
||||||
import org.hibernate.type.jackson.JacksonIntegration;
|
import org.hibernate.type.jackson.JacksonIntegration;
|
||||||
import org.hibernate.type.jakartajson.JakartaJsonIntegration;
|
import org.hibernate.type.jakartajson.JakartaJsonIntegration;
|
||||||
|
import org.hibernate.type.jaxb.JaxbXmlFormatMapper;
|
||||||
|
|
||||||
import static org.hibernate.cfg.AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS;
|
import static org.hibernate.cfg.AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS;
|
||||||
import static org.hibernate.cfg.AvailableSettings.ALLOW_REFRESH_DETACHED_ENTITY;
|
import static org.hibernate.cfg.AvailableSettings.ALLOW_REFRESH_DETACHED_ENTITY;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
package org.hibernate.boot.model;
|
package org.hibernate.boot.model;
|
||||||
|
|
||||||
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
|
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
|
||||||
|
import org.hibernate.service.Service;
|
||||||
import org.hibernate.service.ServiceRegistry;
|
import org.hibernate.service.ServiceRegistry;
|
||||||
import org.hibernate.type.spi.TypeConfiguration;
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
|
|
||||||
|
@ -16,9 +17,19 @@ import org.hibernate.type.spi.TypeConfiguration;
|
||||||
* @author Christian Beikov
|
* @author Christian Beikov
|
||||||
*/
|
*/
|
||||||
public interface FunctionContributions {
|
public interface FunctionContributions {
|
||||||
TypeConfiguration getTypeConfiguration();
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The registry into which the contributions should be made.
|
||||||
|
*/
|
||||||
SqmFunctionRegistry getFunctionRegistry();
|
SqmFunctionRegistry getFunctionRegistry();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access to type information
|
||||||
|
*/
|
||||||
|
TypeConfiguration getTypeConfiguration();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Access to {@linkplain Service services}
|
||||||
|
*/
|
||||||
ServiceRegistry getServiceRegistry();
|
ServiceRegistry getServiceRegistry();
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,9 +14,13 @@
|
||||||
|
|
||||||
package org.hibernate.boot.model;
|
package org.hibernate.boot.model;
|
||||||
|
|
||||||
|
import org.hibernate.query.sqm.function.SqmFunctionRegistry;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contract for contributing functions
|
* Contract for contributing functions
|
||||||
*
|
*
|
||||||
|
* @see SqmFunctionRegistry
|
||||||
|
*
|
||||||
* @author Karel Maesen
|
* @author Karel Maesen
|
||||||
*/
|
*/
|
||||||
public interface FunctionContributor {
|
public interface FunctionContributor {
|
||||||
|
|
|
@ -13,21 +13,24 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import jakarta.persistence.GenerationType;
|
|
||||||
import jakarta.persistence.Index;
|
|
||||||
import jakarta.persistence.SequenceGenerator;
|
|
||||||
import jakarta.persistence.TableGenerator;
|
|
||||||
import jakarta.persistence.UniqueConstraint;
|
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.Internal;
|
import org.hibernate.Internal;
|
||||||
import org.hibernate.id.IdentifierGenerator;
|
import org.hibernate.id.IdentifierGenerator;
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
|
|
||||||
|
import jakarta.persistence.GenerationType;
|
||||||
|
import jakarta.persistence.Index;
|
||||||
|
import jakarta.persistence.SequenceGenerator;
|
||||||
|
import jakarta.persistence.TableGenerator;
|
||||||
|
import jakarta.persistence.UniqueConstraint;
|
||||||
|
|
||||||
import static java.util.Collections.emptyMap;
|
import static java.util.Collections.emptyMap;
|
||||||
import static java.util.Collections.unmodifiableMap;
|
import static java.util.Collections.unmodifiableMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Identifier generator definition, should be immutable.
|
* Models the definition of an {@linkplain org.hibernate.id.IdentityGenerator identifier generator}
|
||||||
|
*
|
||||||
|
* @implSpec Should be immutable.
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model;
|
||||||
|
|
||||||
import jakarta.persistence.NamedEntityGraph;
|
import jakarta.persistence.NamedEntityGraph;
|
||||||
|
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Models the definition of a {@link NamedEntityGraph} annotation
|
* Models a {@linkplain NamedEntityGraph @NamedEntityGraph}
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
|
@ -8,9 +8,10 @@ package org.hibernate.boot.model;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An enumeration of truth values.
|
* An enumeration of truth values.
|
||||||
* <p>
|
*
|
||||||
* Yes this *could* be handled with Boolean, but then you run into potential
|
* @implNote Yes this *could* be handled with Boolean, but then
|
||||||
* problems with unwanted auto-unboxing.
|
* you run into potential problems with unwanted auto-unboxing
|
||||||
|
* and {@linkplain NullPointerException NPE}.
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -17,10 +17,12 @@ import org.hibernate.type.spi.TypeBootstrapContext;
|
||||||
import org.hibernate.type.spi.TypeConfiguration;
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* BeanInstanceProducer implementation for building beans related with
|
||||||
|
* custom types.
|
||||||
|
*
|
||||||
* @author Christian Beikov
|
* @author Christian Beikov
|
||||||
*/
|
*/
|
||||||
public class TypeBeanInstanceProducer implements BeanInstanceProducer, TypeBootstrapContext {
|
public class TypeBeanInstanceProducer implements BeanInstanceProducer, TypeBootstrapContext {
|
||||||
|
|
||||||
private final TypeConfiguration typeConfiguration;
|
private final TypeConfiguration typeConfiguration;
|
||||||
|
|
||||||
public TypeBeanInstanceProducer(TypeConfiguration typeConfiguration) {
|
public TypeBeanInstanceProducer(TypeConfiguration typeConfiguration) {
|
||||||
|
|
|
@ -138,7 +138,7 @@ public class TypeDefinition implements Serializable {
|
||||||
MetadataBuildingContext context) {
|
MetadataBuildingContext context) {
|
||||||
final BootstrapContext bootstrapContext = context.getBootstrapContext();
|
final BootstrapContext bootstrapContext = context.getBootstrapContext();
|
||||||
final TypeConfiguration typeConfiguration = bootstrapContext.getTypeConfiguration();
|
final TypeConfiguration typeConfiguration = bootstrapContext.getTypeConfiguration();
|
||||||
final BeanInstanceProducer instanceProducer = bootstrapContext.getBeanInstanceProducer();
|
final BeanInstanceProducer instanceProducer = bootstrapContext.getCustomTypeProducer();
|
||||||
final boolean isKnownType = Type.class.isAssignableFrom( typeImplementorClass )
|
final boolean isKnownType = Type.class.isAssignableFrom( typeImplementorClass )
|
||||||
|| UserType.class.isAssignableFrom( typeImplementorClass );
|
|| UserType.class.isAssignableFrom( typeImplementorClass );
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,8 @@ import org.hibernate.HibernateException;
|
||||||
import org.hibernate.annotations.common.reflection.ReflectionManager;
|
import org.hibernate.annotations.common.reflection.ReflectionManager;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.internal.ClassmateContext;
|
import org.hibernate.boot.internal.ClassmateContext;
|
||||||
|
import org.hibernate.boot.model.internal.HCANNHelper;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.HCANNHelper;
|
|
||||||
import org.hibernate.internal.util.GenericsHelper;
|
import org.hibernate.internal.util.GenericsHelper;
|
||||||
import org.hibernate.internal.util.type.PrimitiveWrapperHelper;
|
import org.hibernate.internal.util.type.PrimitiveWrapperHelper;
|
||||||
|
|
||||||
|
|
|
@ -6,10 +6,13 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.boot.model.convert.spi;
|
package org.hibernate.boot.model.convert.spi;
|
||||||
|
|
||||||
import jakarta.persistence.AttributeConverter;
|
|
||||||
import org.hibernate.Incubating;
|
import org.hibernate.Incubating;
|
||||||
|
|
||||||
|
import jakarta.persistence.AttributeConverter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* AttributeConverter registrations
|
||||||
|
*
|
||||||
* @author Gavin King
|
* @author Gavin King
|
||||||
*/
|
*/
|
||||||
@Incubating
|
@Incubating
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -12,17 +12,6 @@ import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import jakarta.persistence.AssociationOverride;
|
|
||||||
import jakarta.persistence.AssociationOverrides;
|
|
||||||
import jakarta.persistence.AttributeOverride;
|
|
||||||
import jakarta.persistence.AttributeOverrides;
|
|
||||||
import jakarta.persistence.Column;
|
|
||||||
import jakarta.persistence.Embeddable;
|
|
||||||
import jakarta.persistence.Entity;
|
|
||||||
import jakarta.persistence.ForeignKey;
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
import jakarta.persistence.MappedSuperclass;
|
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
|
@ -44,7 +33,19 @@ import org.hibernate.usertype.internal.AbstractTimeZoneStorageCompositeUserType;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
import static org.hibernate.cfg.AnnotationBinder.useColumnForTimeZoneStorage;
|
import jakarta.persistence.AssociationOverride;
|
||||||
|
import jakarta.persistence.AssociationOverrides;
|
||||||
|
import jakarta.persistence.AttributeOverride;
|
||||||
|
import jakarta.persistence.AttributeOverrides;
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Embeddable;
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.ForeignKey;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
import jakarta.persistence.MappedSuperclass;
|
||||||
|
|
||||||
|
import static org.hibernate.boot.model.internal.AnnotationBinder.useColumnForTimeZoneStorage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
|
@ -331,6 +332,7 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
|
||||||
return override;
|
return override;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public ForeignKey getOverriddenForeignKey(String propertyName) {
|
public ForeignKey getOverriddenForeignKey(String propertyName) {
|
||||||
ForeignKey result = getExactOverriddenForeignKey( propertyName );
|
ForeignKey result = getExactOverriddenForeignKey( propertyName );
|
||||||
if ( result == null && propertyName.contains( ".collection&&element." ) ) {
|
if ( result == null && propertyName.contains( ".collection&&element." ) ) {
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.BasicValueBinder;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.mapping.AggregateColumn;
|
import org.hibernate.mapping.AggregateColumn;
|
||||||
import org.hibernate.mapping.BasicValue;
|
import org.hibernate.mapping.BasicValue;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -20,6 +20,7 @@ import org.hibernate.boot.model.relational.Database;
|
||||||
import org.hibernate.boot.model.relational.Namespace;
|
import org.hibernate.boot.model.relational.Namespace;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.dialect.aggregate.AggregateSupport;
|
import org.hibernate.dialect.aggregate.AggregateSupport;
|
||||||
import org.hibernate.internal.util.ReflectHelper;
|
import org.hibernate.internal.util.ReflectHelper;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
|
||||||
import org.hibernate.annotations.Imported;
|
import org.hibernate.annotations.Imported;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -12,10 +12,10 @@ import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.Check;
|
import org.hibernate.annotations.Check;
|
||||||
import org.hibernate.annotations.ColumnDefault;
|
import org.hibernate.annotations.ColumnDefault;
|
||||||
import org.hibernate.annotations.GeneratedColumn;
|
|
||||||
import org.hibernate.annotations.ColumnTransformer;
|
import org.hibernate.annotations.ColumnTransformer;
|
||||||
import org.hibernate.annotations.ColumnTransformers;
|
import org.hibernate.annotations.ColumnTransformers;
|
||||||
import org.hibernate.annotations.Comment;
|
import org.hibernate.annotations.Comment;
|
||||||
|
import org.hibernate.annotations.GeneratedColumn;
|
||||||
import org.hibernate.annotations.Index;
|
import org.hibernate.annotations.Index;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.model.naming.Identifier;
|
import org.hibernate.boot.model.naming.Identifier;
|
||||||
|
@ -25,7 +25,7 @@ import org.hibernate.boot.model.naming.ObjectNameNormalizer;
|
||||||
import org.hibernate.boot.model.relational.Database;
|
import org.hibernate.boot.model.relational.Database;
|
||||||
import org.hibernate.boot.model.source.spi.AttributePath;
|
import org.hibernate.boot.model.source.spi.AttributePath;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.Nullability;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.mapping.AggregateColumn;
|
import org.hibernate.mapping.AggregateColumn;
|
||||||
|
@ -38,9 +38,9 @@ import org.hibernate.mapping.Table;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.getOverridableAnnotation;
|
import static org.hibernate.boot.model.internal.BinderHelper.getOverridableAnnotation;
|
||||||
import static org.hibernate.cfg.BinderHelper.getPath;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPath;
|
||||||
import static org.hibernate.cfg.BinderHelper.getRelativePath;
|
import static org.hibernate.boot.model.internal.BinderHelper.getRelativePath;
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
||||||
|
@ -414,7 +414,7 @@ public class AnnotatedColumn {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
final Table table = value.getTable();
|
final Table table = value.getTable();
|
||||||
getParent().setTableInternal( table );
|
getParent().setTable( table );
|
||||||
getMappingColumn().setValue( value );
|
getMappingColumn().setValue( value );
|
||||||
value.addColumn( getMappingColumn(), insertable, updatable );
|
value.addColumn( getMappingColumn(), insertable, updatable );
|
||||||
table.addColumn( getMappingColumn() );
|
table.addColumn( getMappingColumn() );
|
|
@ -0,0 +1,178 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
|
*/
|
||||||
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hibernate.AnnotationException;
|
||||||
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.mapping.Join;
|
||||||
|
import org.hibernate.mapping.Table;
|
||||||
|
|
||||||
|
import static java.util.Collections.unmodifiableList;
|
||||||
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of columns that are mapped to a single Java property
|
||||||
|
* or field. This is a slightly uncomfortable abstraction here,
|
||||||
|
* because this concept is arguably missing from JPA (where
|
||||||
|
* there's no equivalent of the Hibernate-defined
|
||||||
|
* {@link org.hibernate.annotations.Columns} annotation) and
|
||||||
|
* so JPA lets each {@link jakarta.persistence.Column} specify
|
||||||
|
* its own {@link jakarta.persistence.Column#table table}.
|
||||||
|
* That leaves us having to enforce the requirement that every
|
||||||
|
* column mapped to a given property must belong to the same
|
||||||
|
* table.
|
||||||
|
*
|
||||||
|
* @author Gavin King
|
||||||
|
*/
|
||||||
|
public class AnnotatedColumns {
|
||||||
|
private final List<AnnotatedColumn> columns = new ArrayList<>();
|
||||||
|
private Table table;
|
||||||
|
private PropertyHolder propertyHolder;
|
||||||
|
// this is really a .-separated property path
|
||||||
|
private String propertyName;
|
||||||
|
private Map<String, Join> joins = Collections.emptyMap();
|
||||||
|
private MetadataBuildingContext buildingContext;
|
||||||
|
|
||||||
|
public List<AnnotatedColumn> getColumns() {
|
||||||
|
return unmodifiableList( columns );
|
||||||
|
}
|
||||||
|
|
||||||
|
public PropertyHolder getPropertyHolder() {
|
||||||
|
return propertyHolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyHolder(PropertyHolder propertyHolder) {
|
||||||
|
this.propertyHolder = propertyHolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A property path relative to the {@link #getPropertyHolder() PropertyHolder}.
|
||||||
|
*/
|
||||||
|
public String getPropertyName() {
|
||||||
|
return propertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPropertyName(String propertyName) {
|
||||||
|
this.propertyName = propertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBuildingContext(MetadataBuildingContext buildingContext) {
|
||||||
|
this.buildingContext = buildingContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MetadataBuildingContext getBuildingContext() {
|
||||||
|
return buildingContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJoins(Map<String, Join> joins) {
|
||||||
|
this.joins = joins;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Join getJoin() {
|
||||||
|
final AnnotatedColumn firstColumn = columns.get( 0 );
|
||||||
|
final String explicitTableName = firstColumn.getExplicitTableName();
|
||||||
|
//note: checkPropertyConsistency() is responsible for ensuring they all have the same table name
|
||||||
|
Join join = joins.get( explicitTableName );
|
||||||
|
if ( join == null ) {
|
||||||
|
// annotation binding seems to use logical and physical naming somewhat inconsistently...
|
||||||
|
final String physicalTableName = getBuildingContext().getMetadataCollector()
|
||||||
|
.getPhysicalTableName( explicitTableName );
|
||||||
|
if ( physicalTableName != null ) {
|
||||||
|
join = joins.get( physicalTableName );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( join == null ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
"Secondary table '" + explicitTableName + "' for property '" + getPropertyHolder().getClassName()
|
||||||
|
+ "' is not declared (use '@SecondaryTable' to declare the secondary table)"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return join;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSecondary() {
|
||||||
|
final AnnotatedColumn firstColumn = columns.get( 0 );
|
||||||
|
final String explicitTableName = firstColumn.getExplicitTableName();
|
||||||
|
//note: checkPropertyConsistency() is responsible for ensuring they all have the same table name
|
||||||
|
return isNotEmpty( explicitTableName )
|
||||||
|
&& !getPropertyHolder().getTable().getName().equals( explicitTableName );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the table to which these columns belong, taking into account secondary tables.
|
||||||
|
*
|
||||||
|
* @return the {@link Table} given in the code by {@link jakarta.persistence.Column#table()}
|
||||||
|
* and held here by {@code explicitTableName}.
|
||||||
|
* @throws AnnotationException if the table named by {@code explicitTableName} is not found
|
||||||
|
* among the secondary tables in {@code joins}.
|
||||||
|
*/
|
||||||
|
public Table getTable() {
|
||||||
|
if ( table != null ) {
|
||||||
|
return table;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// all the columns have to be mapped to the same table
|
||||||
|
// even though at the annotation level it looks like
|
||||||
|
// they could each specify a different table
|
||||||
|
return isSecondary() ? getJoin().getTable() : getPropertyHolder().getTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTable(Table table) {
|
||||||
|
this.table = table;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link #setTable(Table)} instead
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
void setTableInternal(Table table) {
|
||||||
|
this.table = table;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addColumn(AnnotatedColumn child) {
|
||||||
|
columns.add( child );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkPropertyConsistency() {
|
||||||
|
if ( columns.size() > 1 ) {
|
||||||
|
for ( int currentIndex = 1; currentIndex < columns.size(); currentIndex++ ) {
|
||||||
|
final AnnotatedColumn current = columns.get( currentIndex );
|
||||||
|
final AnnotatedColumn previous = columns.get( currentIndex - 1 );
|
||||||
|
if ( !current.isFormula() && !previous.isFormula() ) {
|
||||||
|
if ( current.isNullable() != previous.isNullable() ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
"Column mappings for property '" + propertyName + "' mix nullable with 'not null'"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ( current.isInsertable() != previous.isInsertable() ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
"Column mappings for property '" + propertyName + "' mix insertable with 'insertable=false'"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ( current.isUpdatable() != previous.isUpdatable() ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
"Column mappings for property '" + propertyName + "' mix updatable with 'updatable=false'"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ( !current.getExplicitTableName().equals( previous.getExplicitTableName() ) ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
"Column mappings for property '" + propertyName + "' mix distinct secondary tables"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,17 +2,17 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import jakarta.persistence.DiscriminatorColumn;
|
|
||||||
import jakarta.persistence.DiscriminatorType;
|
|
||||||
|
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.annotations.DiscriminatorFormula;
|
import org.hibernate.annotations.DiscriminatorFormula;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
|
||||||
|
import jakarta.persistence.DiscriminatorColumn;
|
||||||
|
import jakarta.persistence.DiscriminatorType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link jakarta.persistence.DiscriminatorColumn} annotation
|
* A {@link jakarta.persistence.DiscriminatorColumn} annotation
|
||||||
*
|
*
|
||||||
|
@ -50,7 +50,6 @@ public class AnnotatedDiscriminatorColumn extends AnnotatedColumn {
|
||||||
final AnnotatedColumns parent = new AnnotatedColumns();
|
final AnnotatedColumns parent = new AnnotatedColumns();
|
||||||
parent.setBuildingContext( context );
|
parent.setBuildingContext( context );
|
||||||
final AnnotatedDiscriminatorColumn column = new AnnotatedDiscriminatorColumn();
|
final AnnotatedDiscriminatorColumn column = new AnnotatedDiscriminatorColumn();
|
||||||
// column.setContext( context );
|
|
||||||
if ( discriminatorFormula != null ) {
|
if ( discriminatorFormula != null ) {
|
||||||
column.setImplicit( false );
|
column.setImplicit( false );
|
||||||
column.setFormula( discriminatorFormula.value() );
|
column.setFormula( discriminatorFormula.value() );
|
|
@ -2,12 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.PrimaryKeyJoinColumn;
|
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
|
@ -18,12 +15,16 @@ import org.hibernate.boot.model.naming.ObjectNameNormalizer;
|
||||||
import org.hibernate.boot.model.relational.Database;
|
import org.hibernate.boot.model.relational.Database;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.mapping.Column;
|
import org.hibernate.mapping.Column;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.getRelativePath;
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||||
|
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.getRelativePath;
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isQuoted;
|
import static org.hibernate.internal.util.StringHelper.isQuoted;
|
|
@ -0,0 +1,634 @@
|
||||||
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
|
*/
|
||||||
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hibernate.AnnotationException;
|
||||||
|
import org.hibernate.AssertionFailure;
|
||||||
|
import org.hibernate.MappingException;
|
||||||
|
import org.hibernate.annotations.Comment;
|
||||||
|
import org.hibernate.annotations.JoinColumnOrFormula;
|
||||||
|
import org.hibernate.annotations.JoinFormula;
|
||||||
|
import org.hibernate.boot.model.naming.EntityNaming;
|
||||||
|
import org.hibernate.boot.model.naming.Identifier;
|
||||||
|
import org.hibernate.boot.model.naming.ImplicitJoinColumnNameSource;
|
||||||
|
import org.hibernate.boot.model.naming.ImplicitNamingStrategy;
|
||||||
|
import org.hibernate.boot.model.naming.ImplicitPrimaryKeyJoinColumnNameSource;
|
||||||
|
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
|
||||||
|
import org.hibernate.boot.model.relational.Database;
|
||||||
|
import org.hibernate.boot.model.source.spi.AttributePath;
|
||||||
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
|
import org.hibernate.cfg.RecoverableException;
|
||||||
|
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||||
|
import org.hibernate.mapping.Column;
|
||||||
|
import org.hibernate.mapping.Join;
|
||||||
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
import org.hibernate.mapping.Property;
|
||||||
|
import org.hibernate.mapping.Selectable;
|
||||||
|
import org.hibernate.mapping.SimpleValue;
|
||||||
|
import org.hibernate.mapping.Table;
|
||||||
|
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.findReferencedColumnOwner;
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.getRelativePath;
|
||||||
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
|
import static org.hibernate.internal.util.StringHelper.isQuoted;
|
||||||
|
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
||||||
|
import static org.hibernate.internal.util.StringHelper.qualify;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of {@link jakarta.persistence.JoinColumn}s that form a single join
|
||||||
|
* condition, similar in concept to {@link jakarta.persistence.JoinColumns},
|
||||||
|
* but not every instance of this class corresponds to an explicit annotation
|
||||||
|
* in the Java code.
|
||||||
|
* <p>
|
||||||
|
* There's no exact analog of this class in the mapping model, so some
|
||||||
|
* information is lost when it's transformed into a list of {@link Column}s.
|
||||||
|
*
|
||||||
|
* @author Gavin King
|
||||||
|
*/
|
||||||
|
public class AnnotatedJoinColumns extends AnnotatedColumns {
|
||||||
|
|
||||||
|
private final List<AnnotatedJoinColumn> columns = new ArrayList<>();
|
||||||
|
private String propertyName; // this is really a .-separated property path
|
||||||
|
|
||||||
|
private String mappedBy;
|
||||||
|
//property name on the owning side if any
|
||||||
|
private String mappedByPropertyName;
|
||||||
|
//table name on the mapped by side if any
|
||||||
|
private String mappedByTableName;
|
||||||
|
private String mappedByEntityName;
|
||||||
|
private boolean elementCollection;
|
||||||
|
private String manyToManyOwnerSideEntityName;
|
||||||
|
|
||||||
|
public static AnnotatedJoinColumns buildJoinColumnsOrFormulas(
|
||||||
|
JoinColumnOrFormula[] joinColumnOrFormulas,
|
||||||
|
String mappedBy,
|
||||||
|
Map<String, Join> joins,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
MetadataBuildingContext context) {
|
||||||
|
final AnnotatedJoinColumns parent = new AnnotatedJoinColumns();
|
||||||
|
parent.setBuildingContext( context );
|
||||||
|
parent.setJoins( joins );
|
||||||
|
parent.setPropertyHolder( propertyHolder );
|
||||||
|
parent.setPropertyName( getRelativePath( propertyHolder, inferredData.getPropertyName() ) );
|
||||||
|
parent.setMappedBy( mappedBy );
|
||||||
|
for ( JoinColumnOrFormula columnOrFormula : joinColumnOrFormulas ) {
|
||||||
|
final JoinFormula formula = columnOrFormula.formula();
|
||||||
|
final JoinColumn column = columnOrFormula.column();
|
||||||
|
final String annotationString = formula.value();
|
||||||
|
if ( isNotEmpty( annotationString ) ) {
|
||||||
|
AnnotatedJoinColumn.buildJoinFormula( formula, parent );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
AnnotatedJoinColumn.buildJoinColumn( column, mappedBy, parent, propertyHolder, inferredData );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
static AnnotatedJoinColumns buildJoinColumnsWithFormula(
|
||||||
|
JoinFormula joinFormula,
|
||||||
|
Map<String, Join> secondaryTables,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
MetadataBuildingContext context) {
|
||||||
|
final AnnotatedJoinColumns joinColumns = new AnnotatedJoinColumns();
|
||||||
|
joinColumns.setBuildingContext( context );
|
||||||
|
joinColumns.setJoins( secondaryTables );
|
||||||
|
joinColumns.setPropertyHolder( propertyHolder );
|
||||||
|
joinColumns.setPropertyName( getRelativePath( propertyHolder, inferredData.getPropertyName() ) );
|
||||||
|
AnnotatedJoinColumn.buildJoinFormula( joinFormula, joinColumns );
|
||||||
|
return joinColumns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AnnotatedJoinColumns buildJoinColumns(
|
||||||
|
JoinColumn[] joinColumns,
|
||||||
|
Comment comment,
|
||||||
|
String mappedBy,
|
||||||
|
Map<String, Join> joins,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
MetadataBuildingContext buildingContext) {
|
||||||
|
return buildJoinColumnsWithDefaultColumnSuffix(
|
||||||
|
joinColumns,
|
||||||
|
comment,
|
||||||
|
mappedBy,
|
||||||
|
joins,
|
||||||
|
propertyHolder,
|
||||||
|
inferredData,
|
||||||
|
"",
|
||||||
|
buildingContext
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AnnotatedJoinColumns buildJoinColumnsWithDefaultColumnSuffix(
|
||||||
|
JoinColumn[] joinColumns,
|
||||||
|
Comment comment,
|
||||||
|
String mappedBy,
|
||||||
|
Map<String, Join> joins,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
String defaultColumnSuffix,
|
||||||
|
MetadataBuildingContext context) {
|
||||||
|
assert mappedBy == null || !mappedBy.isEmpty();
|
||||||
|
final String propertyName = inferredData.getPropertyName();
|
||||||
|
final String path = qualify( propertyHolder.getPath(), propertyName );
|
||||||
|
final JoinColumn[] overriddes = propertyHolder.getOverriddenJoinColumn( path );
|
||||||
|
final JoinColumn[] actualColumns = overriddes == null ? joinColumns : overriddes;
|
||||||
|
final AnnotatedJoinColumns parent = new AnnotatedJoinColumns();
|
||||||
|
parent.setBuildingContext( context );
|
||||||
|
parent.setJoins( joins );
|
||||||
|
parent.setPropertyHolder( propertyHolder );
|
||||||
|
parent.setPropertyName( getRelativePath( propertyHolder, propertyName ) );
|
||||||
|
parent.setMappedBy( mappedBy );
|
||||||
|
if ( actualColumns == null || actualColumns.length == 0 ) {
|
||||||
|
AnnotatedJoinColumn.buildJoinColumn(
|
||||||
|
null,
|
||||||
|
comment,
|
||||||
|
mappedBy,
|
||||||
|
parent,
|
||||||
|
propertyHolder,
|
||||||
|
inferredData,
|
||||||
|
defaultColumnSuffix
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
parent.setMappedBy( mappedBy );
|
||||||
|
for ( JoinColumn actualColumn : actualColumns ) {
|
||||||
|
AnnotatedJoinColumn.buildJoinColumn(
|
||||||
|
actualColumn,
|
||||||
|
comment,
|
||||||
|
mappedBy,
|
||||||
|
parent,
|
||||||
|
propertyHolder,
|
||||||
|
inferredData,
|
||||||
|
defaultColumnSuffix
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called for join tables in {@link jakarta.persistence.ManyToMany} associations.
|
||||||
|
*/
|
||||||
|
public static AnnotatedJoinColumns buildJoinTableJoinColumns(
|
||||||
|
JoinColumn[] joinColumns,
|
||||||
|
Map<String, Join> secondaryTables,
|
||||||
|
PropertyHolder propertyHolder,
|
||||||
|
PropertyData inferredData,
|
||||||
|
String mappedBy,
|
||||||
|
MetadataBuildingContext context) {
|
||||||
|
final AnnotatedJoinColumns parent = new AnnotatedJoinColumns();
|
||||||
|
parent.setBuildingContext( context );
|
||||||
|
parent.setJoins( secondaryTables );
|
||||||
|
parent.setPropertyHolder( propertyHolder );
|
||||||
|
parent.setPropertyName( getRelativePath( propertyHolder, inferredData.getPropertyName() ) );
|
||||||
|
parent.setMappedBy( mappedBy );
|
||||||
|
if ( joinColumns == null ) {
|
||||||
|
AnnotatedJoinColumn.buildImplicitJoinTableJoinColumn( parent, propertyHolder, inferredData );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for ( JoinColumn joinColumn : joinColumns ) {
|
||||||
|
AnnotatedJoinColumn.buildExplicitJoinTableJoinColumn( parent, propertyHolder, inferredData, joinColumn );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<AnnotatedJoinColumn> getJoinColumns() {
|
||||||
|
return columns;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addColumn(AnnotatedColumn child) {
|
||||||
|
if ( !( child instanceof AnnotatedJoinColumn ) ) {
|
||||||
|
throw new AssertionFailure( "wrong sort of column" );
|
||||||
|
}
|
||||||
|
addColumn( (AnnotatedJoinColumn) child );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addColumn(AnnotatedJoinColumn child) {
|
||||||
|
super.addColumn( child );
|
||||||
|
columns.add( child );
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMappedBy() {
|
||||||
|
return mappedBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMappedBy(String mappedBy) {
|
||||||
|
this.mappedBy = nullIfEmpty( mappedBy );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the association mapping annotation did specify
|
||||||
|
* {@link jakarta.persistence.OneToMany#mappedBy() mappedBy},
|
||||||
|
* meaning that this {@code @JoinColumn} mapping belongs to an
|
||||||
|
* unowned many-valued association.
|
||||||
|
*/
|
||||||
|
public boolean hasMappedBy() {
|
||||||
|
return mappedBy != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMappedByEntityName() {
|
||||||
|
return mappedByEntityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMappedByPropertyName() {
|
||||||
|
return mappedByPropertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMappedByTableName() {
|
||||||
|
return mappedByTableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isElementCollection() {
|
||||||
|
return elementCollection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setElementCollection(boolean elementCollection) {
|
||||||
|
this.elementCollection = elementCollection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setManyToManyOwnerSideEntityName(String entityName) {
|
||||||
|
manyToManyOwnerSideEntityName = entityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getManyToManyOwnerSideEntityName() {
|
||||||
|
return manyToManyOwnerSideEntityName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMappedBy(String entityName, String logicalTableName, String mappedByProperty) {
|
||||||
|
mappedByEntityName = entityName;
|
||||||
|
mappedByTableName = logicalTableName;
|
||||||
|
mappedByPropertyName = mappedByProperty;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the given {@link AnnotatedJoinColumns} represent a reference to
|
||||||
|
* the primary key of the given {@link PersistentClass}, or whether they reference
|
||||||
|
* some other combination of mapped columns.
|
||||||
|
*/
|
||||||
|
public ForeignKeyType getReferencedColumnsType(
|
||||||
|
PersistentClass referencedEntity) {
|
||||||
|
if ( columns.isEmpty() ) {
|
||||||
|
return ForeignKeyType.IMPLICIT_PRIMARY_KEY_REFERENCE; //shortcut
|
||||||
|
}
|
||||||
|
|
||||||
|
final AnnotatedJoinColumn firstColumn = columns.get( 0 );
|
||||||
|
final Object columnOwner = findReferencedColumnOwner( referencedEntity, firstColumn, getBuildingContext() );
|
||||||
|
if ( columnOwner == null ) {
|
||||||
|
try {
|
||||||
|
throw new MappingException( "A '@JoinColumn' references a column named '"
|
||||||
|
+ firstColumn.getReferencedColumn() + "' but the target entity '"
|
||||||
|
+ referencedEntity.getEntityName() + "' has no property which maps to this column" );
|
||||||
|
}
|
||||||
|
catch (MappingException me) {
|
||||||
|
// we throw a recoverable exception here in case this
|
||||||
|
// is merely an ordering issue, so that the SecondPass
|
||||||
|
// will get reprocessed later
|
||||||
|
throw new RecoverableException( me.getMessage(), me );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
final Table table = table( columnOwner );
|
||||||
|
final List<Selectable> keyColumns = referencedEntity.getKey().getSelectables();
|
||||||
|
boolean explicitColumnReference = false;
|
||||||
|
for ( AnnotatedJoinColumn column : columns ) {
|
||||||
|
if ( !column.isReferenceImplicit() ) {
|
||||||
|
explicitColumnReference = true;
|
||||||
|
if ( !keyColumns.contains( column( getBuildingContext(), table, column.getReferencedColumn() ) ) ) {
|
||||||
|
// we have a column which does not belong to the PK
|
||||||
|
return ForeignKeyType.NON_PRIMARY_KEY_REFERENCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( explicitColumnReference ) {
|
||||||
|
// if we got to here, all the columns belong to the PK
|
||||||
|
return keyColumns.size() == columns.size()
|
||||||
|
// we have all the PK columns
|
||||||
|
? ForeignKeyType.EXPLICIT_PRIMARY_KEY_REFERENCE
|
||||||
|
// we have a subset of the PK columns
|
||||||
|
: ForeignKeyType.NON_PRIMARY_KEY_REFERENCE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// there were no nonempty referencedColumnNames
|
||||||
|
return ForeignKeyType.IMPLICIT_PRIMARY_KEY_REFERENCE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Table table(Object persistentClassOrJoin) {
|
||||||
|
return persistentClassOrJoin instanceof PersistentClass
|
||||||
|
? ( (PersistentClass) persistentClassOrJoin ).getTable()
|
||||||
|
: ( (Join) persistentClassOrJoin ).getTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Column column(MetadataBuildingContext context, Table table, String logicalReferencedColumnName) {
|
||||||
|
try {
|
||||||
|
return new Column( context.getMetadataCollector()
|
||||||
|
.getPhysicalColumnName( table, logicalReferencedColumnName ) );
|
||||||
|
}
|
||||||
|
catch (MappingException me) {
|
||||||
|
throw new MappingException( "No column with logical name '" + logicalReferencedColumnName
|
||||||
|
+ "' in table '" + table.getName() + "'" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String buildDefaultColumnName(PersistentClass referencedEntity, String logicalReferencedColumn) {
|
||||||
|
final MetadataBuildingOptions options = getBuildingContext().getBuildingOptions();
|
||||||
|
final ImplicitNamingStrategy implicitNamingStrategy = options.getImplicitNamingStrategy();
|
||||||
|
final PhysicalNamingStrategy physicalNamingStrategy = options.getPhysicalNamingStrategy();
|
||||||
|
|
||||||
|
boolean mappedBySide = getMappedByTableName() != null || getMappedByPropertyName() != null;
|
||||||
|
boolean ownerSide = getPropertyName() != null;
|
||||||
|
boolean isRefColumnQuoted = isQuoted( logicalReferencedColumn );
|
||||||
|
|
||||||
|
final InFlightMetadataCollector collector = getBuildingContext().getMetadataCollector();
|
||||||
|
final Database database = collector.getDatabase();
|
||||||
|
|
||||||
|
Identifier columnIdentifier;
|
||||||
|
if ( mappedBySide ) {
|
||||||
|
// NOTE : While it is completely misleading here to allow for the combination
|
||||||
|
// of a "JPA ElementCollection" to be mappedBy, the code that uses this
|
||||||
|
// class relies on this behavior for handling the inverse side of
|
||||||
|
// many-to-many mappings
|
||||||
|
columnIdentifier = implicitNamingStrategy.determineJoinColumnName(
|
||||||
|
new UnownedImplicitJoinColumnNameSource( referencedEntity, logicalReferencedColumn )
|
||||||
|
);
|
||||||
|
|
||||||
|
//one element was quoted so we quote
|
||||||
|
if ( isRefColumnQuoted || isQuoted( getMappedByTableName() ) ) {
|
||||||
|
columnIdentifier = Identifier.quote( columnIdentifier );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( ownerSide ) {
|
||||||
|
final String logicalTableName = collector.getLogicalTableName( referencedEntity.getTable() );
|
||||||
|
|
||||||
|
columnIdentifier = implicitNamingStrategy.determineJoinColumnName(
|
||||||
|
new OwnedImplicitJoinColumnNameSource( referencedEntity, logicalTableName, logicalReferencedColumn )
|
||||||
|
);
|
||||||
|
|
||||||
|
// HHH-11826 magic. See Ejb3Column and the HHH-6005 comments
|
||||||
|
if ( columnIdentifier.getText().contains( "_collection&&element_" ) ) {
|
||||||
|
columnIdentifier = Identifier.toIdentifier(
|
||||||
|
columnIdentifier.getText().replace( "_collection&&element_", "_" ),
|
||||||
|
columnIdentifier.isQuoted()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//one element was quoted so we quote
|
||||||
|
if ( isRefColumnQuoted || isQuoted( logicalTableName ) ) {
|
||||||
|
columnIdentifier = Identifier.quote( columnIdentifier );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
final Identifier logicalTableName = database.toIdentifier(
|
||||||
|
collector.getLogicalTableName( referencedEntity.getTable() )
|
||||||
|
);
|
||||||
|
|
||||||
|
// is an intra-entity hierarchy table join so copy the name by default
|
||||||
|
columnIdentifier = implicitNamingStrategy.determinePrimaryKeyJoinColumnName(
|
||||||
|
new ImplicitPrimaryKeyJoinColumnNameSource() {
|
||||||
|
@Override
|
||||||
|
public MetadataBuildingContext getBuildingContext() {
|
||||||
|
return AnnotatedJoinColumns.this.getBuildingContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getReferencedTableName() {
|
||||||
|
return logicalTableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getReferencedPrimaryKeyColumnName() {
|
||||||
|
return database.toIdentifier( logicalReferencedColumn );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( !columnIdentifier.isQuoted() && ( isRefColumnQuoted || logicalTableName.isQuoted() ) ) {
|
||||||
|
columnIdentifier = Identifier.quote( columnIdentifier );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final JdbcEnvironment jdbcEnvironment = database.getJdbcEnvironment();
|
||||||
|
return physicalNamingStrategy.toPhysicalColumnName( columnIdentifier, jdbcEnvironment )
|
||||||
|
.render( jdbcEnvironment.getDialect() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A property path relative to the {@link #getPropertyHolder() PropertyHolder}.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getPropertyName() {
|
||||||
|
return propertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setPropertyName(String propertyName) {
|
||||||
|
this.propertyName = propertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ImplicitJoinColumnNameSource.Nature getImplicitNature() {
|
||||||
|
if ( getPropertyHolder().isEntity() ) {
|
||||||
|
return ImplicitJoinColumnNameSource.Nature.ENTITY;
|
||||||
|
}
|
||||||
|
else if ( isElementCollection() ) {
|
||||||
|
return ImplicitJoinColumnNameSource.Nature.ELEMENT_COLLECTION;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return ImplicitJoinColumnNameSource.Nature.ENTITY_COLLECTION;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class UnownedImplicitJoinColumnNameSource implements ImplicitJoinColumnNameSource {
|
||||||
|
final AttributePath attributePath;
|
||||||
|
final Nature implicitNamingNature;
|
||||||
|
|
||||||
|
private final EntityNaming entityNaming;
|
||||||
|
|
||||||
|
private final Identifier referencedTableName;
|
||||||
|
private final String logicalReferencedColumn;
|
||||||
|
|
||||||
|
final InFlightMetadataCollector collector = getBuildingContext().getMetadataCollector();
|
||||||
|
final Database database = collector.getDatabase();
|
||||||
|
|
||||||
|
public UnownedImplicitJoinColumnNameSource(PersistentClass referencedEntity, String logicalReferencedColumn) {
|
||||||
|
this.logicalReferencedColumn = logicalReferencedColumn;
|
||||||
|
attributePath = AttributePath.parse( getMappedByPropertyName() );
|
||||||
|
implicitNamingNature = getImplicitNature();
|
||||||
|
entityNaming = new EntityNaming() {
|
||||||
|
@Override
|
||||||
|
public String getClassName() {
|
||||||
|
return referencedEntity.getClassName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getEntityName() {
|
||||||
|
return referencedEntity.getEntityName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getJpaEntityName() {
|
||||||
|
return referencedEntity.getJpaEntityName();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
referencedTableName = database.toIdentifier( getMappedByTableName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Nature getNature() {
|
||||||
|
return implicitNamingNature;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityNaming getEntityNaming() {
|
||||||
|
return entityNaming;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AttributePath getAttributePath() {
|
||||||
|
return attributePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getReferencedTableName() {
|
||||||
|
return referencedTableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getReferencedColumnName() {
|
||||||
|
if ( logicalReferencedColumn != null ) {
|
||||||
|
return database.toIdentifier( logicalReferencedColumn );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( getMappedByEntityName() == null || getMappedByPropertyName() == null ) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Property mappedByProperty = collector.getEntityBinding( getMappedByEntityName() )
|
||||||
|
.getProperty( getMappedByPropertyName() );
|
||||||
|
final SimpleValue value = (SimpleValue) mappedByProperty.getValue();
|
||||||
|
if ( value.getSelectables().isEmpty() ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
String.format(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
"Association '%s' is 'mappedBy' a property '%s' of entity '%s' with no columns",
|
||||||
|
getPropertyHolder().getPath(),
|
||||||
|
getMappedByPropertyName(),
|
||||||
|
getMappedByEntityName()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
final Selectable selectable = value.getSelectables().get( 0 );
|
||||||
|
if ( !( selectable instanceof Column ) ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
String.format(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
"Association '%s' is 'mappedBy' a property '%s' of entity '%s' which maps to a formula",
|
||||||
|
getPropertyHolder().getPath(),
|
||||||
|
getMappedByPropertyName(),
|
||||||
|
getPropertyHolder().getPath()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if ( value.getSelectables().size() > 1 ) {
|
||||||
|
throw new AnnotationException(
|
||||||
|
String.format(
|
||||||
|
Locale.ENGLISH,
|
||||||
|
"Association '%s' is 'mappedBy' a property '%s' of entity '%s' with multiple columns",
|
||||||
|
getPropertyHolder().getPath(),
|
||||||
|
getMappedByPropertyName(),
|
||||||
|
getPropertyHolder().getPath()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return database.toIdentifier( ( (Column) selectable ).getQuotedName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MetadataBuildingContext getBuildingContext() {
|
||||||
|
return AnnotatedJoinColumns.this.getBuildingContext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class OwnedImplicitJoinColumnNameSource implements ImplicitJoinColumnNameSource {
|
||||||
|
final Nature implicitNamingNature;
|
||||||
|
|
||||||
|
private final EntityNaming entityNaming;
|
||||||
|
|
||||||
|
private final AttributePath attributePath;
|
||||||
|
private final Identifier referencedTableName;
|
||||||
|
private final Identifier referencedColumnName;
|
||||||
|
|
||||||
|
final InFlightMetadataCollector collector = getBuildingContext().getMetadataCollector();
|
||||||
|
final Database database = collector.getDatabase();
|
||||||
|
|
||||||
|
public OwnedImplicitJoinColumnNameSource(PersistentClass referencedEntity, String logicalTableName, String logicalReferencedColumn) {
|
||||||
|
implicitNamingNature = getImplicitNature();
|
||||||
|
entityNaming = new EntityNaming() {
|
||||||
|
@Override
|
||||||
|
public String getClassName() {
|
||||||
|
return referencedEntity.getClassName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getEntityName() {
|
||||||
|
return referencedEntity.getEntityName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getJpaEntityName() {
|
||||||
|
return referencedEntity.getJpaEntityName();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
attributePath = AttributePath.parse( getPropertyName() );
|
||||||
|
referencedTableName = database.toIdentifier( logicalTableName );
|
||||||
|
referencedColumnName = database.toIdentifier( logicalReferencedColumn );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Nature getNature() {
|
||||||
|
return implicitNamingNature;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public EntityNaming getEntityNaming() {
|
||||||
|
return entityNaming;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AttributePath getAttributePath() {
|
||||||
|
return attributePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getReferencedTableName() {
|
||||||
|
return referencedTableName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Identifier getReferencedColumnName() {
|
||||||
|
return referencedColumnName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MetadataBuildingContext getBuildingContext() {
|
||||||
|
return AnnotatedJoinColumns.this.getBuildingContext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
|
@ -73,13 +73,10 @@ import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
||||||
import org.hibernate.boot.model.convert.spi.RegisteredConversion;
|
import org.hibernate.boot.model.convert.spi.RegisteredConversion;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.CollectionBinder;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
|
||||||
import org.hibernate.cfg.annotations.Nullability;
|
|
||||||
import org.hibernate.cfg.annotations.PropertyBinder;
|
|
||||||
import org.hibernate.cfg.annotations.QueryBinder;
|
|
||||||
import org.hibernate.dialect.TimeZoneSupport;
|
import org.hibernate.dialect.TimeZoneSupport;
|
||||||
import org.hibernate.engine.OptimisticLockStyle;
|
import org.hibernate.engine.OptimisticLockStyle;
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
|
@ -151,18 +148,18 @@ import jakarta.persistence.TableGenerator;
|
||||||
import jakarta.persistence.TableGenerators;
|
import jakarta.persistence.TableGenerators;
|
||||||
import jakarta.persistence.Version;
|
import jakarta.persistence.Version;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.getMappedSuperclassOrNull;
|
import static org.hibernate.boot.model.internal.BinderHelper.getMappedSuperclassOrNull;
|
||||||
import static org.hibernate.cfg.BinderHelper.getOverridableAnnotation;
|
import static org.hibernate.boot.model.internal.BinderHelper.getOverridableAnnotation;
|
||||||
import static org.hibernate.cfg.BinderHelper.getPath;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPath;
|
||||||
import static org.hibernate.cfg.BinderHelper.getPropertyOverriddenByMapperOrMapsId;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPropertyOverriddenByMapperOrMapsId;
|
||||||
import static org.hibernate.cfg.BinderHelper.getRelativePath;
|
import static org.hibernate.boot.model.internal.BinderHelper.getRelativePath;
|
||||||
import static org.hibernate.cfg.BinderHelper.hasToOneAnnotation;
|
import static org.hibernate.boot.model.internal.BinderHelper.hasToOneAnnotation;
|
||||||
import static org.hibernate.cfg.BinderHelper.makeIdGenerator;
|
import static org.hibernate.boot.model.internal.BinderHelper.makeIdGenerator;
|
||||||
import static org.hibernate.cfg.InheritanceState.getInheritanceStateOfSuperEntity;
|
import static org.hibernate.boot.model.internal.HCANNHelper.findContainingAnnotation;
|
||||||
import static org.hibernate.cfg.InheritanceState.getSuperclassInheritanceState;
|
import static org.hibernate.boot.model.internal.InheritanceState.getInheritanceStateOfSuperEntity;
|
||||||
import static org.hibernate.cfg.PropertyHolderBuilder.buildPropertyHolder;
|
import static org.hibernate.boot.model.internal.InheritanceState.getSuperclassInheritanceState;
|
||||||
import static org.hibernate.cfg.annotations.HCANNHelper.findContainingAnnotation;
|
import static org.hibernate.boot.model.internal.PropertyBinder.identifierGeneratorCreator;
|
||||||
import static org.hibernate.cfg.annotations.PropertyBinder.identifierGeneratorCreator;
|
import static org.hibernate.boot.model.internal.PropertyHolderBuilder.buildPropertyHolder;
|
||||||
import static org.hibernate.internal.CoreLogging.messageLogger;
|
import static org.hibernate.internal.CoreLogging.messageLogger;
|
||||||
import static org.hibernate.mapping.Constraint.hashedName;
|
import static org.hibernate.mapping.Constraint.hashedName;
|
||||||
import static org.hibernate.mapping.SimpleValue.DEFAULT_ID_GEN_STRATEGY;
|
import static org.hibernate.mapping.SimpleValue.DEFAULT_ID_GEN_STRATEGY;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
||||||
|
|
||||||
|
@ -12,7 +12,10 @@ import jakarta.persistence.AttributeConverter;
|
||||||
import jakarta.persistence.Convert;
|
import jakarta.persistence.Convert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes a {@link jakarta.persistence.Convert} conversion
|
* Describes a {@linkplain AttributeConverter conversion}
|
||||||
|
*
|
||||||
|
* @see AttributeConverter
|
||||||
|
* @see Convert
|
||||||
*
|
*
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
|
@ -45,18 +48,32 @@ public class AttributeConversionInfo {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Class<? extends AttributeConverter<?,?>> getConverterClass() {
|
/**
|
||||||
return converterClass;
|
* The name of the attribute to which the conversion applies.
|
||||||
}
|
*
|
||||||
|
* @see Convert#attributeName()
|
||||||
public boolean isConversionDisabled() {
|
*/
|
||||||
return conversionDisabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAttributeName() {
|
public String getAttributeName() {
|
||||||
return attributeName;
|
return attributeName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@linkplain AttributeConverter converter} implementation class
|
||||||
|
*/
|
||||||
|
public Class<? extends AttributeConverter<?,?>> getConverterClass() {
|
||||||
|
return converterClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether conversion is explicitly disabled for this {@linkplain #getAttributeName() attribute}
|
||||||
|
*/
|
||||||
|
public boolean isConversionDisabled() {
|
||||||
|
return conversionDisabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The annotated element
|
||||||
|
*/
|
||||||
public XAnnotatedElement getSource() {
|
public XAnnotatedElement getSource() {
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations.reflection;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.Remove;
|
import org.hibernate.Remove;
|
||||||
import org.hibernate.boot.AttributeConverterInfo;
|
import org.hibernate.boot.AttributeConverterInfo;
|
||||||
|
@ -13,7 +13,7 @@ import org.hibernate.boot.model.convert.spi.ConverterRegistry;
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*
|
*
|
||||||
* @deprecated no longer used, use {@link ConverterRegistry}
|
* @deprecated use {@link ConverterRegistry}
|
||||||
*/
|
*/
|
||||||
@Deprecated(since = "6.2", forRemoval = true) @Remove
|
@Deprecated(since = "6.2", forRemoval = true) @Remove
|
||||||
public interface AttributeConverterDefinitionCollector extends ConverterRegistry {
|
public interface AttributeConverterDefinitionCollector extends ConverterRegistry {
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ public class BagBinder extends CollectionBinder {
|
||||||
super( customTypeBeanResolver, false, context );
|
super( customTypeBeanResolver, false, context );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected Collection createCollection(PersistentClass owner) {
|
protected Collection createCollection(PersistentClass owner) {
|
||||||
return new Bag( getCustomTypeBeanResolver(), owner, getBuildingContext() );
|
return new Bag( getCustomTypeBeanResolver(), owner, getBuildingContext() );
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.ParameterizedType;
|
import java.lang.reflect.ParameterizedType;
|
||||||
|
@ -24,22 +24,21 @@ import org.hibernate.annotations.AnyKeyJavaType;
|
||||||
import org.hibernate.annotations.AnyKeyJdbcType;
|
import org.hibernate.annotations.AnyKeyJdbcType;
|
||||||
import org.hibernate.annotations.AnyKeyJdbcTypeCode;
|
import org.hibernate.annotations.AnyKeyJdbcTypeCode;
|
||||||
import org.hibernate.annotations.CollectionId;
|
import org.hibernate.annotations.CollectionId;
|
||||||
import org.hibernate.annotations.CollectionIdType;
|
|
||||||
import org.hibernate.annotations.CollectionIdJavaType;
|
import org.hibernate.annotations.CollectionIdJavaType;
|
||||||
import org.hibernate.annotations.CollectionIdJdbcType;
|
import org.hibernate.annotations.CollectionIdJdbcType;
|
||||||
import org.hibernate.annotations.CollectionIdJdbcTypeCode;
|
import org.hibernate.annotations.CollectionIdJdbcTypeCode;
|
||||||
import org.hibernate.annotations.CollectionIdMutability;
|
import org.hibernate.annotations.CollectionIdMutability;
|
||||||
import org.hibernate.annotations.Type;
|
import org.hibernate.annotations.CollectionIdType;
|
||||||
import org.hibernate.annotations.Immutable;
|
import org.hibernate.annotations.Immutable;
|
||||||
import org.hibernate.annotations.JdbcTypeCode;
|
import org.hibernate.annotations.JdbcTypeCode;
|
||||||
import org.hibernate.annotations.ListIndexJavaType;
|
import org.hibernate.annotations.ListIndexJavaType;
|
||||||
import org.hibernate.annotations.ListIndexJdbcType;
|
import org.hibernate.annotations.ListIndexJdbcType;
|
||||||
import org.hibernate.annotations.ListIndexJdbcTypeCode;
|
import org.hibernate.annotations.ListIndexJdbcTypeCode;
|
||||||
import org.hibernate.annotations.MapKeyType;
|
|
||||||
import org.hibernate.annotations.MapKeyJavaType;
|
import org.hibernate.annotations.MapKeyJavaType;
|
||||||
import org.hibernate.annotations.MapKeyJdbcType;
|
import org.hibernate.annotations.MapKeyJdbcType;
|
||||||
import org.hibernate.annotations.MapKeyJdbcTypeCode;
|
import org.hibernate.annotations.MapKeyJdbcTypeCode;
|
||||||
import org.hibernate.annotations.MapKeyMutability;
|
import org.hibernate.annotations.MapKeyMutability;
|
||||||
|
import org.hibernate.annotations.MapKeyType;
|
||||||
import org.hibernate.annotations.Mutability;
|
import org.hibernate.annotations.Mutability;
|
||||||
import org.hibernate.annotations.Nationalized;
|
import org.hibernate.annotations.Nationalized;
|
||||||
import org.hibernate.annotations.Parameter;
|
import org.hibernate.annotations.Parameter;
|
||||||
|
@ -47,18 +46,14 @@ import org.hibernate.annotations.Target;
|
||||||
import org.hibernate.annotations.TimeZoneColumn;
|
import org.hibernate.annotations.TimeZoneColumn;
|
||||||
import org.hibernate.annotations.TimeZoneStorage;
|
import org.hibernate.annotations.TimeZoneStorage;
|
||||||
import org.hibernate.annotations.TimeZoneStorageType;
|
import org.hibernate.annotations.TimeZoneStorageType;
|
||||||
|
import org.hibernate.annotations.Type;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.model.TypeDefinition;
|
import org.hibernate.boot.model.TypeDefinition;
|
||||||
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.AccessType;
|
|
||||||
import org.hibernate.cfg.AnnotatedColumn;
|
|
||||||
import org.hibernate.cfg.AnnotatedColumns;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumns;
|
|
||||||
import org.hibernate.cfg.PkDrivenByDefaultMapsIdSecondPass;
|
|
||||||
import org.hibernate.cfg.SetBasicValueTypeSecondPass;
|
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.dialect.NationalizationSupport;
|
import org.hibernate.dialect.NationalizationSupport;
|
||||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
|
@ -95,7 +90,7 @@ import jakarta.persistence.Temporal;
|
||||||
import jakarta.persistence.TemporalType;
|
import jakarta.persistence.TemporalType;
|
||||||
import jakarta.persistence.Version;
|
import jakarta.persistence.Version;
|
||||||
|
|
||||||
import static org.hibernate.cfg.annotations.HCANNHelper.findAnnotation;
|
import static org.hibernate.boot.model.internal.HCANNHelper.findAnnotation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.lang.annotation.Repeatable;
|
import java.lang.annotation.Repeatable;
|
||||||
|
@ -22,9 +22,6 @@ import java.util.StringTokenizer;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import jakarta.persistence.FetchType;
|
|
||||||
import jakarta.persistence.ManyToOne;
|
|
||||||
import jakarta.persistence.OneToOne;
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.FetchMode;
|
import org.hibernate.FetchMode;
|
||||||
|
@ -43,9 +40,7 @@ import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.BasicValueBinder;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
|
||||||
import org.hibernate.cfg.annotations.Nullability;
|
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.id.IdentifierGenerator;
|
import org.hibernate.id.IdentifierGenerator;
|
||||||
import org.hibernate.id.PersistentIdentifierGenerator;
|
import org.hibernate.id.PersistentIdentifierGenerator;
|
||||||
|
@ -69,13 +64,15 @@ import org.hibernate.type.descriptor.java.JavaType;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
import jakarta.persistence.GeneratedValue;
|
import jakarta.persistence.GeneratedValue;
|
||||||
import jakarta.persistence.GenerationType;
|
import jakarta.persistence.GenerationType;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import jakarta.persistence.OneToOne;
|
||||||
|
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildColumnOrFormulaFromAnnotation;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnOrFormulaFromAnnotation;
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
|
|
||||||
import static org.hibernate.internal.util.StringHelper.qualify;
|
import static org.hibernate.internal.util.StringHelper.qualify;
|
||||||
import static org.hibernate.mapping.SimpleValue.DEFAULT_ID_GEN_STRATEGY;
|
import static org.hibernate.mapping.SimpleValue.DEFAULT_ID_GEN_STRATEGY;
|
||||||
import static org.hibernate.property.access.spi.BuiltInPropertyAccessStrategies.EMBEDDED;
|
import static org.hibernate.property.access.spi.BuiltInPropertyAccessStrategies.EMBEDDED;
|
||||||
|
@ -1053,7 +1050,8 @@ public class BinderHelper {
|
||||||
return Stream.of( (Annotation[]) value.invoke(annotation) );
|
return Stream.of( (Annotation[]) value.invoke(annotation) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (NoSuchMethodException ignored) {}
|
catch (NoSuchMethodException ignored) {
|
||||||
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
throw new AssertionFailure("could not read @DialectOverride annotation", e);
|
throw new AssertionFailure("could not read @DialectOverride annotation", e);
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations.reflection;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
|
|
@ -2,23 +2,20 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import jakarta.persistence.Convert;
|
|
||||||
import jakarta.persistence.Converts;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
|
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
|
@ -33,6 +30,10 @@ import org.hibernate.mapping.Table;
|
||||||
import org.hibernate.mapping.ToOne;
|
import org.hibernate.mapping.ToOne;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
|
|
||||||
|
import jakarta.persistence.Convert;
|
||||||
|
import jakarta.persistence.Converts;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -179,10 +180,12 @@ public class ClassPropertyHolder extends AbstractPropertyHolder {
|
||||||
return attributeConversionInfoMap.get( path );
|
return attributeConversionInfoMap.get( path );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getEntityName() {
|
public String getEntityName() {
|
||||||
return persistentClass.getEntityName();
|
return persistentClass.getEntityName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addProperty(Property prop, AnnotatedColumns columns, XClass declaringClass) {
|
public void addProperty(Property prop, AnnotatedColumns columns, XClass declaringClass) {
|
||||||
//AnnotatedColumn.checkPropertyConsistency( ); //already called earlier
|
//AnnotatedColumn.checkPropertyConsistency( ); //already called earlier
|
||||||
if ( columns != null ) {
|
if ( columns != null ) {
|
||||||
|
@ -198,6 +201,7 @@ public class ClassPropertyHolder extends AbstractPropertyHolder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addProperty(Property prop, XClass declaringClass) {
|
public void addProperty(Property prop, XClass declaringClass) {
|
||||||
if ( prop.getValue() instanceof Component ) {
|
if ( prop.getValue() instanceof Component ) {
|
||||||
//TODO handle quote and non quote table comparison
|
//TODO handle quote and non quote table comparison
|
||||||
|
@ -215,6 +219,7 @@ public class ClassPropertyHolder extends AbstractPropertyHolder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
|
public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
|
||||||
Join join = entityBinder.addJoin( joinTableAnn, this, noDelayInPkColumnCreation );
|
Join join = entityBinder.addJoin( joinTableAnn, this, noDelayInPkColumnCreation );
|
||||||
this.joins = entityBinder.getSecondaryTables();
|
this.joins = entityBinder.getSecondaryTables();
|
||||||
|
@ -389,34 +394,42 @@ public class ClassPropertyHolder extends AbstractPropertyHolder {
|
||||||
return joinsPerRealTableName;
|
return joinsPerRealTableName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getClassName() {
|
public String getClassName() {
|
||||||
return persistentClass.getClassName();
|
return persistentClass.getClassName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getEntityOwnerClassName() {
|
public String getEntityOwnerClassName() {
|
||||||
return getClassName();
|
return getClassName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Table getTable() {
|
public Table getTable() {
|
||||||
return persistentClass.getTable();
|
return persistentClass.getTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isComponent() {
|
public boolean isComponent() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isEntity() {
|
public boolean isEntity() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public PersistentClass getPersistentClass() {
|
public PersistentClass getPersistentClass() {
|
||||||
return persistentClass;
|
return persistentClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public KeyValue getIdentifier() {
|
public KeyValue getIdentifier() {
|
||||||
return persistentClass.getIdentifier();
|
return persistentClass.getIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isOrWithinEmbeddedId() {
|
public boolean isOrWithinEmbeddedId() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
@ -14,28 +14,6 @@ import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import jakarta.persistence.Access;
|
|
||||||
import jakarta.persistence.AttributeOverride;
|
|
||||||
import jakarta.persistence.AttributeOverrides;
|
|
||||||
import jakarta.persistence.CollectionTable;
|
|
||||||
import jakarta.persistence.ConstraintMode;
|
|
||||||
import jakarta.persistence.ElementCollection;
|
|
||||||
import jakarta.persistence.Embedded;
|
|
||||||
import jakarta.persistence.FetchType;
|
|
||||||
import jakarta.persistence.ForeignKey;
|
|
||||||
import jakarta.persistence.Index;
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.JoinColumns;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
import jakarta.persistence.ManyToMany;
|
|
||||||
import jakarta.persistence.MapKey;
|
|
||||||
import jakarta.persistence.MapKeyColumn;
|
|
||||||
import jakarta.persistence.MapKeyJoinColumn;
|
|
||||||
import jakarta.persistence.MapKeyJoinColumns;
|
|
||||||
import jakarta.persistence.OneToMany;
|
|
||||||
import jakarta.persistence.OrderBy;
|
|
||||||
import jakarta.persistence.OrderColumn;
|
|
||||||
import jakarta.persistence.UniqueConstraint;
|
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
|
@ -95,29 +73,13 @@ import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.BootLogging;
|
import org.hibernate.boot.BootLogging;
|
||||||
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
||||||
import org.hibernate.boot.model.TypeDefinition;
|
import org.hibernate.boot.model.TypeDefinition;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector.CollectionTypeRegistrationDescriptor;
|
import org.hibernate.boot.spi.InFlightMetadataCollector.CollectionTypeRegistrationDescriptor;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.AccessType;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.cfg.AnnotatedClassType;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.cfg.AnnotatedColumn;
|
|
||||||
import org.hibernate.cfg.AnnotatedColumns;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumn;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumns;
|
|
||||||
import org.hibernate.cfg.AnnotationBinder;
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.cfg.CollectionPropertyHolder;
|
|
||||||
import org.hibernate.cfg.CollectionSecondPass;
|
|
||||||
import org.hibernate.cfg.ComponentPropertyHolder;
|
|
||||||
import org.hibernate.cfg.IndexColumn;
|
|
||||||
import org.hibernate.cfg.InheritanceState;
|
|
||||||
import org.hibernate.cfg.NotYetImplementedException;
|
|
||||||
import org.hibernate.cfg.PropertyData;
|
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
|
||||||
import org.hibernate.cfg.PropertyInferredData;
|
|
||||||
import org.hibernate.cfg.PropertyPreloadedData;
|
|
||||||
import org.hibernate.cfg.SecondPass;
|
|
||||||
import org.hibernate.cfg.WrappedInferredData;
|
|
||||||
import org.hibernate.engine.config.spi.ConfigurationService;
|
import org.hibernate.engine.config.spi.ConfigurationService;
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
|
@ -149,26 +111,49 @@ import org.hibernate.usertype.UserCollectionType;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
|
import jakarta.persistence.Access;
|
||||||
|
import jakarta.persistence.AttributeOverride;
|
||||||
|
import jakarta.persistence.AttributeOverrides;
|
||||||
|
import jakarta.persistence.CollectionTable;
|
||||||
|
import jakarta.persistence.ConstraintMode;
|
||||||
|
import jakarta.persistence.ElementCollection;
|
||||||
|
import jakarta.persistence.Embedded;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.ForeignKey;
|
||||||
|
import jakarta.persistence.Index;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinColumns;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
import jakarta.persistence.ManyToMany;
|
||||||
|
import jakarta.persistence.MapKey;
|
||||||
|
import jakarta.persistence.MapKeyColumn;
|
||||||
|
import jakarta.persistence.MapKeyJoinColumn;
|
||||||
|
import jakarta.persistence.MapKeyJoinColumns;
|
||||||
|
import jakarta.persistence.OneToMany;
|
||||||
|
import jakarta.persistence.OrderBy;
|
||||||
|
import jakarta.persistence.OrderColumn;
|
||||||
|
import jakarta.persistence.UniqueConstraint;
|
||||||
|
|
||||||
import static jakarta.persistence.AccessType.PROPERTY;
|
import static jakarta.persistence.AccessType.PROPERTY;
|
||||||
import static jakarta.persistence.FetchType.EAGER;
|
import static jakarta.persistence.FetchType.EAGER;
|
||||||
import static jakarta.persistence.FetchType.LAZY;
|
import static jakarta.persistence.FetchType.LAZY;
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildColumnFromAnnotation;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnFromAnnotation;
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildColumnFromNoAnnotation;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnFromNoAnnotation;
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildColumnsFromAnnotations;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnsFromAnnotations;
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildFormulaFromAnnotation;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildFormulaFromAnnotation;
|
||||||
import static org.hibernate.cfg.AnnotatedJoinColumns.buildJoinColumnsWithDefaultColumnSuffix;
|
import static org.hibernate.boot.model.internal.AnnotatedJoinColumns.buildJoinColumnsWithDefaultColumnSuffix;
|
||||||
import static org.hibernate.cfg.AnnotatedJoinColumns.buildJoinTableJoinColumns;
|
import static org.hibernate.boot.model.internal.AnnotatedJoinColumns.buildJoinTableJoinColumns;
|
||||||
import static org.hibernate.cfg.AnnotationBinder.fillComponent;
|
import static org.hibernate.boot.model.internal.AnnotationBinder.fillComponent;
|
||||||
import static org.hibernate.cfg.BinderHelper.buildAnyValue;
|
import static org.hibernate.boot.model.internal.BinderHelper.buildAnyValue;
|
||||||
import static org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference;
|
import static org.hibernate.boot.model.internal.BinderHelper.createSyntheticPropertyReference;
|
||||||
import static org.hibernate.cfg.BinderHelper.getCascadeStrategy;
|
import static org.hibernate.boot.model.internal.BinderHelper.getCascadeStrategy;
|
||||||
import static org.hibernate.cfg.BinderHelper.getFetchMode;
|
import static org.hibernate.boot.model.internal.BinderHelper.getFetchMode;
|
||||||
import static org.hibernate.cfg.BinderHelper.getOverridableAnnotation;
|
import static org.hibernate.boot.model.internal.BinderHelper.getOverridableAnnotation;
|
||||||
import static org.hibernate.cfg.BinderHelper.getPath;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPath;
|
||||||
import static org.hibernate.cfg.BinderHelper.isPrimitive;
|
import static org.hibernate.boot.model.internal.BinderHelper.isPrimitive;
|
||||||
import static org.hibernate.cfg.BinderHelper.toAliasEntityMap;
|
import static org.hibernate.boot.model.internal.BinderHelper.toAliasEntityMap;
|
||||||
import static org.hibernate.cfg.BinderHelper.toAliasTableMap;
|
import static org.hibernate.boot.model.internal.BinderHelper.toAliasTableMap;
|
||||||
import static org.hibernate.cfg.PropertyHolderBuilder.buildPropertyHolder;
|
import static org.hibernate.boot.model.internal.PropertyHolderBuilder.buildPropertyHolder;
|
||||||
import static org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle.fromResultCheckStyle;
|
import static org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle.fromResultCheckStyle;
|
||||||
import static org.hibernate.internal.util.StringHelper.getNonEmptyOrConjunctionIfBothNonEmpty;
|
import static org.hibernate.internal.util.StringHelper.getNonEmptyOrConjunctionIfBothNonEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
|
@ -465,8 +450,9 @@ public abstract class CollectionBinder {
|
||||||
final ReflectionManager reflectionManager = context.getBootstrapContext().getReflectionManager();
|
final ReflectionManager reflectionManager = context.getBootstrapContext().getReflectionManager();
|
||||||
if ( oneToManyAnn != null ) {
|
if ( oneToManyAnn != null ) {
|
||||||
if ( joinColumns.isSecondary() ) {
|
if ( joinColumns.isSecondary() ) {
|
||||||
//TODO: fix the error message
|
throw new AssertionFailure(
|
||||||
throw new NotYetImplementedException( "Collections having FK in secondary table" );
|
"Collections having FK in secondary table - " + getPath( propertyHolder, inferredData )
|
||||||
|
);
|
||||||
}
|
}
|
||||||
collectionBinder.setFkJoinColumns( joinColumns );
|
collectionBinder.setFkJoinColumns( joinColumns );
|
||||||
mappedBy = nullIfEmpty( oneToManyAnn.mappedBy() );
|
mappedBy = nullIfEmpty( oneToManyAnn.mappedBy() );
|
||||||
|
@ -479,8 +465,9 @@ public abstract class CollectionBinder {
|
||||||
}
|
}
|
||||||
else if ( elementCollectionAnn != null ) {
|
else if ( elementCollectionAnn != null ) {
|
||||||
if ( joinColumns.isSecondary() ) {
|
if ( joinColumns.isSecondary() ) {
|
||||||
//TODO: fix the error message
|
throw new AssertionFailure(
|
||||||
throw new NotYetImplementedException( "Collections having FK in secondary table" );
|
"Collections having FK in secondary table - " + getPath( propertyHolder, inferredData )
|
||||||
|
);
|
||||||
}
|
}
|
||||||
collectionBinder.setFkJoinColumns( joinColumns );
|
collectionBinder.setFkJoinColumns( joinColumns );
|
||||||
mappedBy = null;
|
mappedBy = null;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
@ -228,26 +228,12 @@ public class CollectionPropertyHolder extends AbstractPropertyHolder {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startingProperty(XProperty property) {
|
public void startingProperty(XProperty property) {
|
||||||
if ( property == null ) {
|
// for now, nothing to do...
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// todo : implement (and make sure it gets called - for handling collections of composites)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected AttributeConversionInfo locateAttributeConversionInfo(XProperty property) {
|
protected AttributeConversionInfo locateAttributeConversionInfo(XProperty property) {
|
||||||
if ( canElementBeConverted && canKeyBeConverted ) {
|
// nothing to do
|
||||||
// need to decide whether 'property' refers to key/element
|
|
||||||
// todo : this may not work for 'basic collections' since there is no XProperty for the element
|
|
||||||
}
|
|
||||||
else if ( canKeyBeConverted ) {
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -266,26 +252,32 @@ public class CollectionPropertyHolder extends AbstractPropertyHolder {
|
||||||
return elementAttributeConversionInfoMap.get( path );
|
return elementAttributeConversionInfoMap.get( path );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getClassName() {
|
public String getClassName() {
|
||||||
throw new AssertionFailure( "Collection property holder does not have a class name" );
|
throw new AssertionFailure( "Collection property holder does not have a class name" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getEntityOwnerClassName() {
|
public String getEntityOwnerClassName() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Table getTable() {
|
public Table getTable() {
|
||||||
return collection.getCollectionTable();
|
return collection.getCollectionTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addProperty(Property prop, XClass declaringClass) {
|
public void addProperty(Property prop, XClass declaringClass) {
|
||||||
throw new AssertionFailure( "Cannot add property to a collection" );
|
throw new AssertionFailure( "Cannot add property to a collection" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public KeyValue getIdentifier() {
|
public KeyValue getIdentifier() {
|
||||||
throw new AssertionFailure( "Identifier collection not yet managed" );
|
throw new AssertionFailure( "Identifier collection not yet managed" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isOrWithinEmbeddedId() {
|
public boolean isOrWithinEmbeddedId() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -295,27 +287,33 @@ public class CollectionPropertyHolder extends AbstractPropertyHolder {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public PersistentClass getPersistentClass() {
|
public PersistentClass getPersistentClass() {
|
||||||
return collection.getOwner();
|
return collection.getOwner();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isComponent() {
|
public boolean isComponent() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isEntity() {
|
public boolean isEntity() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getEntityName() {
|
public String getEntityName() {
|
||||||
return collection.getOwner().getEntityName();
|
return collection.getOwner().getEntityName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addProperty(Property prop, AnnotatedColumns columns, XClass declaringClass) {
|
public void addProperty(Property prop, AnnotatedColumns columns, XClass declaringClass) {
|
||||||
//Ejb3Column.checkPropertyConsistency( ); //already called earlier
|
//Ejb3Column.checkPropertyConsistency( ); //already called earlier
|
||||||
throw new AssertionFailure( "addProperty to a join table of a collection: does it make sense?" );
|
throw new AssertionFailure( "addProperty to a join table of a collection: does it make sense?" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
|
public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
|
||||||
throw new AssertionFailure( "Add a <join> in a second pass" );
|
throw new AssertionFailure( "Add a <join> in a second pass" );
|
||||||
}
|
}
|
|
@ -2,13 +2,14 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
import org.hibernate.mapping.IndexedCollection;
|
import org.hibernate.mapping.IndexedCollection;
|
||||||
|
@ -34,6 +35,7 @@ public abstract class CollectionSecondPass implements SecondPass {
|
||||||
this.collection = collection;
|
this.collection = collection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses)
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses)
|
||||||
throws MappingException {
|
throws MappingException {
|
||||||
if ( LOG.isDebugEnabled() ) {
|
if ( LOG.isDebugEnabled() ) {
|
|
@ -2,9 +2,20 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
import org.hibernate.AnnotationException;
|
||||||
|
import org.hibernate.annotations.Columns;
|
||||||
|
import org.hibernate.annotations.Comment;
|
||||||
|
import org.hibernate.annotations.Formula;
|
||||||
|
import org.hibernate.annotations.JoinColumnOrFormula;
|
||||||
|
import org.hibernate.annotations.JoinColumnsOrFormulas;
|
||||||
|
import org.hibernate.annotations.JoinFormula;
|
||||||
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.ElementCollection;
|
import jakarta.persistence.ElementCollection;
|
||||||
|
@ -16,25 +27,13 @@ import jakarta.persistence.ManyToOne;
|
||||||
import jakarta.persistence.OneToMany;
|
import jakarta.persistence.OneToMany;
|
||||||
import jakarta.persistence.OneToOne;
|
import jakarta.persistence.OneToOne;
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnFromAnnotation;
|
||||||
import org.hibernate.annotations.Columns;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnFromNoAnnotation;
|
||||||
import org.hibernate.annotations.Comment;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildColumnsFromAnnotations;
|
||||||
import org.hibernate.annotations.Formula;
|
import static org.hibernate.boot.model.internal.AnnotatedColumn.buildFormulaFromAnnotation;
|
||||||
import org.hibernate.annotations.JoinColumnOrFormula;
|
import static org.hibernate.boot.model.internal.BinderHelper.getOverridableAnnotation;
|
||||||
import org.hibernate.annotations.JoinColumnsOrFormulas;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPath;
|
||||||
import org.hibernate.annotations.JoinFormula;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPropertyOverriddenByMapperOrMapsId;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
|
||||||
import org.hibernate.cfg.annotations.Nullability;
|
|
||||||
|
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildColumnFromAnnotation;
|
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildColumnFromNoAnnotation;
|
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildColumnsFromAnnotations;
|
|
||||||
import static org.hibernate.cfg.AnnotatedColumn.buildFormulaFromAnnotation;
|
|
||||||
import static org.hibernate.cfg.BinderHelper.getOverridableAnnotation;
|
|
||||||
import static org.hibernate.cfg.BinderHelper.getPath;
|
|
||||||
import static org.hibernate.cfg.BinderHelper.getPropertyOverriddenByMapperOrMapsId;
|
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
||||||
|
|
|
@ -2,24 +2,18 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import jakarta.persistence.Column;
|
|
||||||
import jakarta.persistence.Convert;
|
|
||||||
import jakarta.persistence.Converts;
|
|
||||||
import jakarta.persistence.EmbeddedId;
|
|
||||||
import jakarta.persistence.Id;
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.loader.PropertyPath;
|
import org.hibernate.loader.PropertyPath;
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
|
@ -29,6 +23,15 @@ import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.Property;
|
import org.hibernate.mapping.Property;
|
||||||
import org.hibernate.mapping.Table;
|
import org.hibernate.mapping.Table;
|
||||||
|
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.Convert;
|
||||||
|
import jakarta.persistence.Converts;
|
||||||
|
import jakarta.persistence.EmbeddedId;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
|
||||||
|
import static org.hibernate.boot.model.internal.HCANNHelper.hasAnnotation;
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,13 +63,10 @@ import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
||||||
//TODO introduce an overrideTable() method for columns held by sec table rather than the hack
|
|
||||||
// joinsPerRealTableName in ClassPropertyHolder
|
|
||||||
private final Component component;
|
private final Component component;
|
||||||
private final boolean isOrWithinEmbeddedId;
|
private final boolean isOrWithinEmbeddedId;
|
||||||
private final boolean isWithinElementCollection;
|
private final boolean isWithinElementCollection;
|
||||||
|
|
||||||
// private boolean virtual;
|
|
||||||
private final String embeddedAttributeName;
|
private final String embeddedAttributeName;
|
||||||
private final Map<String,AttributeConversionInfo> attributeConversionInfoMap;
|
private final Map<String,AttributeConversionInfo> attributeConversionInfoMap;
|
||||||
|
|
||||||
|
@ -80,26 +80,16 @@ public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
||||||
final XProperty embeddedXProperty = inferredData.getProperty();
|
final XProperty embeddedXProperty = inferredData.getProperty();
|
||||||
setCurrentProperty( embeddedXProperty );
|
setCurrentProperty( embeddedXProperty );
|
||||||
this.component = component;
|
this.component = component;
|
||||||
this.isOrWithinEmbeddedId =
|
this.isOrWithinEmbeddedId = parent.isOrWithinEmbeddedId()
|
||||||
parent.isOrWithinEmbeddedId()
|
|| hasAnnotation( embeddedXProperty, Id.class, EmbeddedId.class );
|
||||||
|| ( embeddedXProperty != null &&
|
|
||||||
( embeddedXProperty.isAnnotationPresent( Id.class )
|
|
||||||
|| embeddedXProperty.isAnnotationPresent( EmbeddedId.class ) ) );
|
|
||||||
this.isWithinElementCollection = parent.isWithinElementCollection() ||
|
this.isWithinElementCollection = parent.isWithinElementCollection() ||
|
||||||
parent instanceof CollectionPropertyHolder;
|
parent instanceof CollectionPropertyHolder;
|
||||||
|
|
||||||
if ( embeddedXProperty != null ) {
|
if ( embeddedXProperty != null ) {
|
||||||
// this.virtual = false;
|
|
||||||
this.embeddedAttributeName = embeddedXProperty.getName();
|
this.embeddedAttributeName = embeddedXProperty.getName();
|
||||||
this.attributeConversionInfoMap = processAttributeConversions( embeddedXProperty );
|
this.attributeConversionInfoMap = processAttributeConversions( embeddedXProperty );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// could be either:
|
|
||||||
// 1) virtual/dynamic component
|
|
||||||
// 2) collection element/key
|
|
||||||
|
|
||||||
// temp
|
|
||||||
// this.virtual = true;
|
|
||||||
this.embeddedAttributeName = "";
|
this.embeddedAttributeName = "";
|
||||||
this.attributeConversionInfoMap = processAttributeConversions( inferredData.getClassOrElement() );
|
this.attributeConversionInfoMap = processAttributeConversions( inferredData.getClassOrElement() );
|
||||||
}
|
}
|
||||||
|
@ -209,10 +199,6 @@ public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if ( virtual ) {
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// again : the property coming in here *should* be the property on the embeddable (Address#city in the example),
|
// again : the property coming in here *should* be the property on the embeddable (Address#city in the example),
|
||||||
// so we just ignore it if there is already an existing conversion info for that path since they would have
|
// so we just ignore it if there is already an existing conversion info for that path since they would have
|
||||||
// precedence
|
// precedence
|
||||||
|
@ -266,10 +252,12 @@ public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
||||||
return attributeConversionInfoMap.get( path );
|
return attributeConversionInfoMap.get( path );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getEntityName() {
|
public String getEntityName() {
|
||||||
return component.getComponentClassName();
|
return component.getComponentClassName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addProperty(Property property, AnnotatedColumns columns, XClass declaringClass) {
|
public void addProperty(Property property, AnnotatedColumns columns, XClass declaringClass) {
|
||||||
//Ejb3Column.checkPropertyConsistency( ); //already called earlier
|
//Ejb3Column.checkPropertyConsistency( ); //already called earlier
|
||||||
// Check table matches between the component and the columns
|
// Check table matches between the component and the columns
|
||||||
|
@ -293,50 +281,62 @@ public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
||||||
addProperty( property, declaringClass );
|
addProperty( property, declaringClass );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
|
public Join addJoin(JoinTable joinTableAnn, boolean noDelayInPkColumnCreation) {
|
||||||
return parent.addJoin( joinTableAnn, noDelayInPkColumnCreation );
|
return parent.addJoin( joinTableAnn, noDelayInPkColumnCreation );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getClassName() {
|
public String getClassName() {
|
||||||
return component.getComponentClassName();
|
return component.getComponentClassName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getEntityOwnerClassName() {
|
public String getEntityOwnerClassName() {
|
||||||
return component.getOwner().getClassName();
|
return component.getOwner().getClassName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Table getTable() {
|
public Table getTable() {
|
||||||
return component.getTable();
|
return component.getTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addProperty(Property prop, XClass declaringClass) {
|
public void addProperty(Property prop, XClass declaringClass) {
|
||||||
component.addProperty( prop );
|
component.addProperty( prop );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public KeyValue getIdentifier() {
|
public KeyValue getIdentifier() {
|
||||||
return component.getOwner().getIdentifier();
|
return component.getOwner().getIdentifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isOrWithinEmbeddedId() {
|
public boolean isOrWithinEmbeddedId() {
|
||||||
return isOrWithinEmbeddedId;
|
return isOrWithinEmbeddedId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isWithinElementCollection() {
|
public boolean isWithinElementCollection() {
|
||||||
return isWithinElementCollection;
|
return isWithinElementCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public PersistentClass getPersistentClass() {
|
public PersistentClass getPersistentClass() {
|
||||||
return component.getOwner();
|
return component.getOwner();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isComponent() {
|
public boolean isComponent() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isEntity() {
|
public boolean isEntity() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setParentProperty(String parentProperty) {
|
public void setParentProperty(String parentProperty) {
|
||||||
component.setParentProperty( parentProperty );
|
component.setParentProperty( parentProperty );
|
||||||
}
|
}
|
||||||
|
@ -347,11 +347,15 @@ public class ComponentPropertyHolder extends AbstractPropertyHolder {
|
||||||
Column[] result = super.getOverriddenColumn( propertyName );
|
Column[] result = super.getOverriddenColumn( propertyName );
|
||||||
if ( result == null ) {
|
if ( result == null ) {
|
||||||
String userPropertyName = extractUserPropertyName( "id", propertyName );
|
String userPropertyName = extractUserPropertyName( "id", propertyName );
|
||||||
if ( userPropertyName != null ) result = super.getOverriddenColumn( userPropertyName );
|
if ( userPropertyName != null ) {
|
||||||
|
result = super.getOverriddenColumn( userPropertyName );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ( result == null ) {
|
if ( result == null ) {
|
||||||
String userPropertyName = extractUserPropertyName( PropertyPath.IDENTIFIER_MAPPER_PROPERTY, propertyName );
|
String userPropertyName = extractUserPropertyName( PropertyPath.IDENTIFIER_MAPPER_PROPERTY, propertyName );
|
||||||
if ( userPropertyName != null ) result = super.getOverriddenColumn( userPropertyName );
|
if ( userPropertyName != null ) {
|
||||||
|
result = super.getOverriddenColumn( userPropertyName );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
|
@ -2,11 +2,12 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.JoinedSubclass;
|
import org.hibernate.mapping.JoinedSubclass;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.RootClass;
|
import org.hibernate.mapping.RootClass;
|
||||||
|
@ -26,6 +27,7 @@ public class CreateKeySecondPass implements SecondPass {
|
||||||
this.joinedSubClass = joinedSubClass;
|
this.joinedSubClass = joinedSubClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses) {
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses) {
|
||||||
if ( rootClass != null ) {
|
if ( rootClass != null ) {
|
||||||
rootClass.createPrimaryKey();
|
rootClass.createPrimaryKey();
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -17,28 +17,6 @@ import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import jakarta.persistence.Access;
|
|
||||||
import jakarta.persistence.AttributeOverride;
|
|
||||||
import jakarta.persistence.AttributeOverrides;
|
|
||||||
import jakarta.persistence.Cacheable;
|
|
||||||
import jakarta.persistence.ConstraintMode;
|
|
||||||
import jakarta.persistence.DiscriminatorColumn;
|
|
||||||
import jakarta.persistence.DiscriminatorType;
|
|
||||||
import jakarta.persistence.DiscriminatorValue;
|
|
||||||
import jakarta.persistence.Entity;
|
|
||||||
import jakarta.persistence.IdClass;
|
|
||||||
import jakarta.persistence.InheritanceType;
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
import jakarta.persistence.NamedEntityGraph;
|
|
||||||
import jakarta.persistence.NamedEntityGraphs;
|
|
||||||
import jakarta.persistence.PrimaryKeyJoinColumn;
|
|
||||||
import jakarta.persistence.PrimaryKeyJoinColumns;
|
|
||||||
import jakarta.persistence.SecondaryTable;
|
|
||||||
import jakarta.persistence.SecondaryTables;
|
|
||||||
import jakarta.persistence.SharedCacheMode;
|
|
||||||
|
|
||||||
import jakarta.persistence.UniqueConstraint;
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
|
@ -83,38 +61,22 @@ import org.hibernate.annotations.common.reflection.ReflectionManager;
|
||||||
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
||||||
|
import org.hibernate.boot.model.NamedEntityGraphDefinition;
|
||||||
|
import org.hibernate.boot.model.internal.InheritanceState.ElementsToProcess;
|
||||||
import org.hibernate.boot.model.naming.EntityNaming;
|
import org.hibernate.boot.model.naming.EntityNaming;
|
||||||
import org.hibernate.boot.model.naming.Identifier;
|
import org.hibernate.boot.model.naming.Identifier;
|
||||||
import org.hibernate.boot.model.naming.ImplicitEntityNameSource;
|
import org.hibernate.boot.model.naming.ImplicitEntityNameSource;
|
||||||
import org.hibernate.boot.model.naming.NamingStrategyHelper;
|
import org.hibernate.boot.model.naming.NamingStrategyHelper;
|
||||||
import org.hibernate.boot.model.relational.QualifiedTableName;
|
import org.hibernate.boot.model.relational.QualifiedTableName;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.AccessType;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.cfg.AnnotatedClassType;
|
|
||||||
import org.hibernate.cfg.AnnotatedColumns;
|
|
||||||
import org.hibernate.cfg.AnnotatedDiscriminatorColumn;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumns;
|
|
||||||
import org.hibernate.cfg.AnnotationBinder;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumn;
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
import org.hibernate.cfg.CreateKeySecondPass;
|
|
||||||
import org.hibernate.cfg.IdGeneratorResolverSecondPass;
|
|
||||||
import org.hibernate.cfg.InheritanceState;
|
|
||||||
import org.hibernate.cfg.InheritanceState.ElementsToProcess;
|
|
||||||
import org.hibernate.cfg.JoinedSubclassFkSecondPass;
|
|
||||||
import org.hibernate.cfg.PropertyData;
|
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
|
||||||
import org.hibernate.cfg.PropertyPreloadedData;
|
|
||||||
import org.hibernate.cfg.SecondaryTableFromAnnotationSecondPass;
|
|
||||||
import org.hibernate.cfg.SecondaryTableSecondPass;
|
|
||||||
import org.hibernate.cfg.UniqueConstraintHolder;
|
|
||||||
import org.hibernate.cfg.internal.NullableDiscriminatorColumnSecondPass;
|
|
||||||
import org.hibernate.engine.OptimisticLockStyle;
|
import org.hibernate.engine.OptimisticLockStyle;
|
||||||
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||||
import org.hibernate.engine.spi.FilterDefinition;
|
import org.hibernate.engine.spi.FilterDefinition;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
|
||||||
import org.hibernate.jpa.event.spi.CallbackType;
|
import org.hibernate.jpa.event.spi.CallbackType;
|
||||||
import org.hibernate.loader.PropertyPath;
|
import org.hibernate.loader.PropertyPath;
|
||||||
import org.hibernate.mapping.BasicValue;
|
import org.hibernate.mapping.BasicValue;
|
||||||
|
@ -133,20 +95,42 @@ import org.hibernate.mapping.Table;
|
||||||
import org.hibernate.mapping.TableOwner;
|
import org.hibernate.mapping.TableOwner;
|
||||||
import org.hibernate.mapping.UnionSubclass;
|
import org.hibernate.mapping.UnionSubclass;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
|
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
import static org.hibernate.cfg.AnnotatedDiscriminatorColumn.buildDiscriminatorColumn;
|
import jakarta.persistence.Access;
|
||||||
import static org.hibernate.cfg.AnnotatedJoinColumn.buildInheritanceJoinColumn;
|
import jakarta.persistence.AttributeOverride;
|
||||||
import static org.hibernate.cfg.BinderHelper.getMappedSuperclassOrNull;
|
import jakarta.persistence.AttributeOverrides;
|
||||||
import static org.hibernate.cfg.BinderHelper.getOverridableAnnotation;
|
import jakarta.persistence.Cacheable;
|
||||||
import static org.hibernate.cfg.BinderHelper.hasToOneAnnotation;
|
import jakarta.persistence.ConstraintMode;
|
||||||
import static org.hibernate.cfg.BinderHelper.makeIdGenerator;
|
import jakarta.persistence.DiscriminatorColumn;
|
||||||
import static org.hibernate.cfg.BinderHelper.toAliasEntityMap;
|
import jakarta.persistence.DiscriminatorType;
|
||||||
import static org.hibernate.cfg.BinderHelper.toAliasTableMap;
|
import jakarta.persistence.DiscriminatorValue;
|
||||||
import static org.hibernate.cfg.InheritanceState.getInheritanceStateOfSuperEntity;
|
import jakarta.persistence.Entity;
|
||||||
import static org.hibernate.cfg.PropertyHolderBuilder.buildPropertyHolder;
|
import jakarta.persistence.IdClass;
|
||||||
|
import jakarta.persistence.InheritanceType;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
import jakarta.persistence.NamedEntityGraph;
|
||||||
|
import jakarta.persistence.NamedEntityGraphs;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumns;
|
||||||
|
import jakarta.persistence.SecondaryTable;
|
||||||
|
import jakarta.persistence.SecondaryTables;
|
||||||
|
import jakarta.persistence.SharedCacheMode;
|
||||||
|
import jakarta.persistence.UniqueConstraint;
|
||||||
|
|
||||||
|
import static org.hibernate.boot.model.internal.AnnotatedDiscriminatorColumn.buildDiscriminatorColumn;
|
||||||
|
import static org.hibernate.boot.model.internal.AnnotatedJoinColumn.buildInheritanceJoinColumn;
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.getMappedSuperclassOrNull;
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.getOverridableAnnotation;
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.hasToOneAnnotation;
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.makeIdGenerator;
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.toAliasEntityMap;
|
||||||
|
import static org.hibernate.boot.model.internal.BinderHelper.toAliasTableMap;
|
||||||
|
import static org.hibernate.boot.model.internal.InheritanceState.getInheritanceStateOfSuperEntity;
|
||||||
|
import static org.hibernate.boot.model.internal.PropertyHolderBuilder.buildPropertyHolder;
|
||||||
import static org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle.fromResultCheckStyle;
|
import static org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle.fromResultCheckStyle;
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
|
@ -1440,32 +1424,39 @@ public class EntityBinder {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
switch ( effectiveCache.include().toLowerCase( Locale.ROOT ) ) {
|
switch ( effectiveCache.include().toLowerCase( Locale.ROOT ) ) {
|
||||||
case "all":
|
case "all": {
|
||||||
return true;
|
return true;
|
||||||
case "non-lazy":
|
}
|
||||||
|
case "non-lazy": {
|
||||||
return false;
|
return false;
|
||||||
default:
|
}
|
||||||
|
default: {
|
||||||
throw new AnnotationException( "Class '" + annotatedClass.getName()
|
throw new AnnotationException( "Class '" + annotatedClass.getName()
|
||||||
+ "' has a '@Cache' with undefined option 'include=\"" + effectiveCache.include() + "\"'" );
|
+ "' has a '@Cache' with undefined option 'include=\"" + effectiveCache.include() + "\"'" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isCacheable(SharedCacheMode sharedCacheMode, Cacheable explicitCacheableAnn) {
|
private static boolean isCacheable(SharedCacheMode sharedCacheMode, Cacheable explicitCacheableAnn) {
|
||||||
switch (sharedCacheMode) {
|
switch (sharedCacheMode) {
|
||||||
case ALL:
|
case ALL: {
|
||||||
// all entities should be cached
|
// all entities should be cached
|
||||||
return true;
|
return true;
|
||||||
case ENABLE_SELECTIVE:
|
}
|
||||||
|
case ENABLE_SELECTIVE: {
|
||||||
// only entities with @Cacheable(true) should be cached
|
// only entities with @Cacheable(true) should be cached
|
||||||
return explicitCacheableAnn != null && explicitCacheableAnn.value();
|
return explicitCacheableAnn != null && explicitCacheableAnn.value();
|
||||||
case DISABLE_SELECTIVE:
|
}
|
||||||
|
case DISABLE_SELECTIVE: {
|
||||||
// only entities with @Cacheable(false) should not be cached
|
// only entities with @Cacheable(false) should not be cached
|
||||||
return explicitCacheableAnn == null || explicitCacheableAnn.value();
|
return explicitCacheableAnn == null || explicitCacheableAnn.value();
|
||||||
default:
|
}
|
||||||
|
default: {
|
||||||
// treat both NONE and UNSPECIFIED the same
|
// treat both NONE and UNSPECIFIED the same
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static String resolveCacheConcurrencyStrategy(CacheConcurrencyStrategy strategy) {
|
private static String resolveCacheConcurrencyStrategy(CacheConcurrencyStrategy strategy) {
|
||||||
final org.hibernate.cache.spi.access.AccessType accessType = strategy.toAccessType();
|
final org.hibernate.cache.spi.access.AccessType accessType = strategy.toAccessType();
|
||||||
|
@ -1476,6 +1467,7 @@ public class EntityBinder {
|
||||||
return new LocalCacheAnnotationStub( region, determineCacheConcurrencyStrategy( context ) );
|
return new LocalCacheAnnotationStub( region, determineCacheConcurrencyStrategy( context ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("ClassExplicitlyAnnotation")
|
||||||
private static class LocalCacheAnnotationStub implements Cache {
|
private static class LocalCacheAnnotationStub implements Cache {
|
||||||
private final String region;
|
private final String region;
|
||||||
private final CacheConcurrencyStrategy usage;
|
private final CacheConcurrencyStrategy usage;
|
||||||
|
@ -1485,10 +1477,12 @@ public class EntityBinder {
|
||||||
this.usage = usage;
|
this.usage = usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public CacheConcurrencyStrategy usage() {
|
public CacheConcurrencyStrategy usage() {
|
||||||
return usage;
|
return usage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String region() {
|
public String region() {
|
||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
@ -1498,10 +1492,12 @@ public class EntityBinder {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String include() {
|
public String include() {
|
||||||
return "all";
|
return "all";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Class<? extends Annotation> annotationType() {
|
public Class<? extends Annotation> annotationType() {
|
||||||
return Cache.class;
|
return Cache.class;
|
||||||
}
|
}
|
||||||
|
@ -1522,6 +1518,7 @@ public class EntityBinder {
|
||||||
this.jpaEntityName = jpaEntityName;
|
this.jpaEntityName = jpaEntityName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Identifier determineImplicitName(final MetadataBuildingContext buildingContext) {
|
public Identifier determineImplicitName(final MetadataBuildingContext buildingContext) {
|
||||||
return buildingContext.getBuildingOptions().getImplicitNamingStrategy().determinePrimaryTableName(
|
return buildingContext.getBuildingOptions().getImplicitNamingStrategy().determinePrimaryTableName(
|
||||||
new ImplicitEntityNameSource() {
|
new ImplicitEntityNameSource() {
|
|
@ -2,11 +2,12 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
|
|
||||||
|
@ -35,15 +36,20 @@ public abstract class FkSecondPass implements SecondPass {
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if ( this == o ) return true;
|
if ( this == o ) {
|
||||||
if ( !( o instanceof FkSecondPass ) ) return false;
|
return true;
|
||||||
|
}
|
||||||
FkSecondPass that = (FkSecondPass) o;
|
if ( !( o instanceof FkSecondPass ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final FkSecondPass that = (FkSecondPass) o;
|
||||||
return uniqueCounter == that.uniqueCounter;
|
return uniqueCounter == that.uniqueCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return uniqueCounter;
|
return uniqueCounter;
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.AnnotatedElement;
|
||||||
import java.lang.reflect.Member;
|
import java.lang.reflect.Member;
|
||||||
|
|
||||||
import org.hibernate.Internal;
|
import org.hibernate.Internal;
|
||||||
|
@ -21,6 +22,80 @@ import org.hibernate.annotations.common.reflection.java.JavaXMember;
|
||||||
*/
|
*/
|
||||||
@Internal
|
@Internal
|
||||||
public final class HCANNHelper {
|
public final class HCANNHelper {
|
||||||
|
public static boolean hasAnnotation(
|
||||||
|
AnnotatedElement element,
|
||||||
|
Class<? extends Annotation> annotationToCheck) {
|
||||||
|
if ( element == null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//noinspection RedundantIfStatement
|
||||||
|
if ( element.isAnnotationPresent( annotationToCheck ) ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasAnnotation(
|
||||||
|
AnnotatedElement element,
|
||||||
|
Class<? extends Annotation> annotationToCheck,
|
||||||
|
Class<? extends Annotation> annotationToCheck2) {
|
||||||
|
if ( element == null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return element.isAnnotationPresent( annotationToCheck )
|
||||||
|
|| element.isAnnotationPresent( annotationToCheck2 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasAnnotation(
|
||||||
|
XAnnotatedElement element,
|
||||||
|
Class<? extends Annotation> annotationToCheck) {
|
||||||
|
if ( element == null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//noinspection RedundantIfStatement
|
||||||
|
if ( element.isAnnotationPresent( annotationToCheck ) ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasAnnotation(
|
||||||
|
XAnnotatedElement element,
|
||||||
|
Class<? extends Annotation> annotationToCheck,
|
||||||
|
Class<? extends Annotation> annotationToCheck2) {
|
||||||
|
if ( element == null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//noinspection RedundantIfStatement
|
||||||
|
if ( element.isAnnotationPresent( annotationToCheck )
|
||||||
|
|| element.isAnnotationPresent( annotationToCheck2 ) ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasAnnotation(XAnnotatedElement element, Class<? extends Annotation>... annotationsToCheck) {
|
||||||
|
assert annotationsToCheck != null && annotationsToCheck.length > 0;
|
||||||
|
|
||||||
|
if ( element == null ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( int i = 0; i < annotationsToCheck.length; i++ ) {
|
||||||
|
if ( element.isAnnotationPresent( annotationsToCheck[i] ) ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Prefer using {@link #annotatedElementSignature(JavaXMember)}
|
* @deprecated Prefer using {@link #annotatedElementSignature(JavaXMember)}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -13,13 +13,8 @@ import java.util.function.Supplier;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.CollectionId;
|
import org.hibernate.annotations.CollectionId;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.AnnotatedColumn;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.cfg.AnnotatedColumns;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.cfg.IdGeneratorResolverSecondPass;
|
|
||||||
import org.hibernate.cfg.PropertyData;
|
|
||||||
import org.hibernate.cfg.PropertyInferredData;
|
|
||||||
import org.hibernate.cfg.SecondPass;
|
|
||||||
import org.hibernate.cfg.WrappedInferredData;
|
|
||||||
import org.hibernate.mapping.BasicValue;
|
import org.hibernate.mapping.BasicValue;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
import org.hibernate.mapping.IdentifierBag;
|
import org.hibernate.mapping.IdentifierBag;
|
||||||
|
@ -31,7 +26,7 @@ import org.hibernate.usertype.UserCollectionType;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.makeIdGenerator;
|
import static org.hibernate.boot.model.internal.BinderHelper.makeIdGenerator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A {@link CollectionBinder} for {@link org.hibernate.collection.spi.PersistentIdentifierBag id bags}
|
* A {@link CollectionBinder} for {@link org.hibernate.collection.spi.PersistentIdentifierBag id bags}
|
||||||
|
@ -47,6 +42,7 @@ public class IdBagBinder extends BagBinder {
|
||||||
super( customTypeBeanResolver, buildingContext );
|
super( customTypeBeanResolver, buildingContext );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected Collection createCollection(PersistentClass owner) {
|
protected Collection createCollection(PersistentClass owner) {
|
||||||
return new IdentifierBag( getCustomTypeBeanResolver(), owner, getBuildingContext() );
|
return new IdentifierBag( getCustomTypeBeanResolver(), owner, getBuildingContext() );
|
||||||
}
|
}
|
||||||
|
@ -57,7 +53,6 @@ public class IdBagBinder extends BagBinder {
|
||||||
|
|
||||||
final CollectionId collectionIdAnn = property.getAnnotation( CollectionId.class );
|
final CollectionId collectionIdAnn = property.getAnnotation( CollectionId.class );
|
||||||
if ( collectionIdAnn == null ) {
|
if ( collectionIdAnn == null ) {
|
||||||
//TODO shouldn't this be an assertion?
|
|
||||||
throw new MappingException( "idbag mapping missing '@CollectionId' annotation" );
|
throw new MappingException( "idbag mapping missing '@CollectionId' annotation" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,13 +102,16 @@ public class IdBagBinder extends BagBinder {
|
||||||
final String namedGenerator = collectionIdAnn.generator();
|
final String namedGenerator = collectionIdAnn.generator();
|
||||||
|
|
||||||
switch (namedGenerator) {
|
switch (namedGenerator) {
|
||||||
case "identity":
|
case "identity": {
|
||||||
throw new MappingException("IDENTITY generation not supported for CollectionId");
|
throw new MappingException("IDENTITY generation not supported for CollectionId");
|
||||||
case "assigned":
|
}
|
||||||
|
case "assigned": {
|
||||||
throw new MappingException("Assigned generation not supported for CollectionId");
|
throw new MappingException("Assigned generation not supported for CollectionId");
|
||||||
case "native":
|
}
|
||||||
|
case "native": {
|
||||||
throw new MappingException("Native generation not supported for CollectionId");
|
throw new MappingException("Native generation not supported for CollectionId");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final String generatorName;
|
final String generatorName;
|
||||||
final String generatorType;
|
final String generatorType;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -12,10 +12,11 @@ import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
import org.hibernate.boot.model.IdentifierGeneratorDefinition;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.makeIdGenerator;
|
import static org.hibernate.boot.model.internal.BinderHelper.makeIdGenerator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Andrea Boriero
|
* @author Andrea Boriero
|
|
@ -2,16 +2,19 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import jakarta.persistence.OrderColumn;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.ListIndexBase;
|
import org.hibernate.annotations.ListIndexBase;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.mapping.Join;
|
import org.hibernate.mapping.Join;
|
||||||
|
|
||||||
|
import jakarta.persistence.OrderColumn;
|
||||||
|
|
||||||
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -13,6 +13,7 @@ import java.util.Map;
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.Column;
|
import org.hibernate.mapping.Column;
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
import org.hibernate.mapping.Index;
|
import org.hibernate.mapping.Index;
|
|
@ -2,13 +2,23 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.hibernate.AnnotationException;
|
||||||
|
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
||||||
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
||||||
import jakarta.persistence.Access;
|
import jakarta.persistence.Access;
|
||||||
import jakarta.persistence.EmbeddedId;
|
import jakarta.persistence.EmbeddedId;
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
|
@ -18,14 +28,6 @@ import jakarta.persistence.Inheritance;
|
||||||
import jakarta.persistence.InheritanceType;
|
import jakarta.persistence.InheritanceType;
|
||||||
import jakarta.persistence.MappedSuperclass;
|
import jakarta.persistence.MappedSuperclass;
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
|
||||||
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
|
||||||
import org.hibernate.mapping.PersistentClass;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some extra data to the inheritance position of a class.
|
* Some extra data to the inheritance position of a class.
|
||||||
*
|
*
|
|
@ -2,14 +2,15 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import jakarta.persistence.Index;
|
import jakarta.persistence.Index;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -4,7 +4,7 @@
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations.reflection.internal;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.beans.Introspector;
|
import java.beans.Introspector;
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
@ -99,7 +99,6 @@ import org.hibernate.boot.jaxb.mapping.ManagedType;
|
||||||
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
|
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
|
||||||
import org.hibernate.boot.spi.BootstrapContext;
|
import org.hibernate.boot.spi.BootstrapContext;
|
||||||
import org.hibernate.boot.spi.ClassLoaderAccess;
|
import org.hibernate.boot.spi.ClassLoaderAccess;
|
||||||
import org.hibernate.cfg.annotations.reflection.PersistentAttributeFilter;
|
|
||||||
import org.hibernate.internal.CoreLogging;
|
import org.hibernate.internal.CoreLogging;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
|
@ -198,8 +197,9 @@ import jakarta.persistence.Transient;
|
||||||
import jakarta.persistence.UniqueConstraint;
|
import jakarta.persistence.UniqueConstraint;
|
||||||
import jakarta.persistence.Version;
|
import jakarta.persistence.Version;
|
||||||
|
|
||||||
import static org.hibernate.cfg.annotations.reflection.internal.PropertyMappingElementCollector.JAXB_TRANSIENT_NAME;
|
import static org.hibernate.boot.model.internal.HCANNHelper.hasAnnotation;
|
||||||
import static org.hibernate.cfg.annotations.reflection.internal.PropertyMappingElementCollector.PERSISTENT_ATTRIBUTE_NAME;
|
import static org.hibernate.boot.model.internal.PropertyMappingElementCollector.JAXB_TRANSIENT_NAME;
|
||||||
|
import static org.hibernate.boot.model.internal.PropertyMappingElementCollector.PERSISTENT_ATTRIBUTE_NAME;
|
||||||
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
import static org.hibernate.internal.util.StringHelper.isEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
|
|
||||||
|
@ -211,9 +211,7 @@ import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
// FIXME HHH-14529 Change this class to use JaxbEntityMappings instead of Document.
|
@SuppressWarnings({ "unchecked", "ToArrayCallWithZeroLengthArrayArgument" })
|
||||||
// I'm delaying this change in order to keep the commits simpler and easier to review.
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( JPAXMLOverriddenAnnotationReader.class );
|
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( JPAXMLOverriddenAnnotationReader.class );
|
||||||
|
|
||||||
|
@ -226,7 +224,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
METHOD
|
METHOD
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Map<Class, String> annotationToXml;
|
private static final Map<Class<? extends Annotation>, String> annotationToXml;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
annotationToXml = new HashMap<>();
|
annotationToXml = new HashMap<>();
|
||||||
|
@ -256,7 +254,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
annotationToXml.put( SqlResultSetMappings.class, "sql-result-set-mapping" );
|
annotationToXml.put( SqlResultSetMappings.class, "sql-result-set-mapping" );
|
||||||
annotationToXml.put( ExcludeDefaultListeners.class, "exclude-default-listeners" );
|
annotationToXml.put( ExcludeDefaultListeners.class, "exclude-default-listeners" );
|
||||||
annotationToXml.put( ExcludeSuperclassListeners.class, "exclude-superclass-listeners" );
|
annotationToXml.put( ExcludeSuperclassListeners.class, "exclude-superclass-listeners" );
|
||||||
annotationToXml.put( AccessType.class, "access" );
|
// annotationToXml.put( AccessType.class, "access" );
|
||||||
annotationToXml.put( AttributeOverride.class, "attribute-override" );
|
annotationToXml.put( AttributeOverride.class, "attribute-override" );
|
||||||
annotationToXml.put( AttributeOverrides.class, "attribute-override" );
|
annotationToXml.put( AttributeOverrides.class, "attribute-override" );
|
||||||
annotationToXml.put( AttributeOverride.class, "association-override" );
|
annotationToXml.put( AttributeOverride.class, "association-override" );
|
||||||
|
@ -347,7 +345,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
try {
|
try {
|
||||||
mirroredAttribute = field.getDeclaringClass().getDeclaredMethod( expectedGetter );
|
mirroredAttribute = field.getDeclaringClass().getDeclaredMethod( expectedGetter );
|
||||||
}
|
}
|
||||||
catch ( NoSuchMethodException e ) {
|
catch (NoSuchMethodException e) {
|
||||||
//no method
|
//no method
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -371,7 +369,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
try {
|
try {
|
||||||
mirroredAttribute = method.getDeclaringClass().getDeclaredField( propertyName );
|
mirroredAttribute = method.getDeclaringClass().getDeclaredField( propertyName );
|
||||||
}
|
}
|
||||||
catch ( NoSuchFieldException e ) {
|
catch (NoSuchFieldException e) {
|
||||||
//no method
|
//no method
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -458,7 +456,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
addIfNotNull( annotationList, getEntityListeners( managedTypeOverride, defaults ) );
|
addIfNotNull( annotationList, getEntityListeners( managedTypeOverride, defaults ) );
|
||||||
addIfNotNull( annotationList, getConverts( managedTypeOverride, defaults ) );
|
addIfNotNull( annotationList, getConverts( managedTypeOverride, defaults ) );
|
||||||
|
|
||||||
this.annotations = annotationList.toArray( new Annotation[annotationList.size()] );
|
this.annotations = annotationList.toArray( new Annotation[0] );
|
||||||
for ( Annotation ann : this.annotations ) {
|
for ( Annotation ann : this.annotations ) {
|
||||||
annotationsMap.put( ann.annotationType(), ann );
|
annotationsMap.put( ann.annotationType(), ann );
|
||||||
}
|
}
|
||||||
|
@ -504,7 +502,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
processEventAnnotations( annotationList, defaults );
|
processEventAnnotations( annotationList, defaults );
|
||||||
//FIXME use annotationsMap rather than annotationList this will be faster since the annotation type is usually known at put() time
|
//FIXME use annotationsMap rather than annotationList this will be faster since the annotation type is usually known at put() time
|
||||||
this.annotations = annotationList.toArray( new Annotation[annotationList.size()] );
|
this.annotations = annotationList.toArray( new Annotation[0] );
|
||||||
for ( Annotation ann : this.annotations ) {
|
for ( Annotation ann : this.annotations ) {
|
||||||
annotationsMap.put( ann.annotationType(), ann );
|
annotationsMap.put( ann.annotationType(), ann );
|
||||||
}
|
}
|
||||||
|
@ -519,16 +517,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void remove(List<Annotation> annotationList, Class<? extends Annotation> annotationToRemove) {
|
|
||||||
annotationList.removeIf( next -> next.getClass().equals( annotationToRemove ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
private Annotation getConvertsForAttribute(PropertyMappingElementCollector elementsForProperty, XMLContext.Default defaults) {
|
private Annotation getConvertsForAttribute(PropertyMappingElementCollector elementsForProperty, XMLContext.Default defaults) {
|
||||||
// NOTE : we use a map here to make sure that an xml and annotation referring to the same attribute
|
|
||||||
// properly overrides. Very sparse map, yes, but easy setup.
|
|
||||||
// todo : revisit this
|
|
||||||
// although bear in mind that this code is no longer used in 5.0...
|
|
||||||
|
|
||||||
final Map<String, Convert> convertAnnotationsMap = new HashMap<>();
|
final Map<String, Convert> convertAnnotationsMap = new HashMap<>();
|
||||||
|
|
||||||
for ( JaxbBasic element : elementsForProperty.getBasic() ) {
|
for ( JaxbBasic element : elementsForProperty.getBasic() ) {
|
||||||
|
@ -555,7 +544,10 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
|
|
||||||
if ( !convertAnnotationsMap.isEmpty() ) {
|
if ( !convertAnnotationsMap.isEmpty() ) {
|
||||||
final AnnotationDescriptor groupingDescriptor = new AnnotationDescriptor( Converts.class );
|
final AnnotationDescriptor groupingDescriptor = new AnnotationDescriptor( Converts.class );
|
||||||
groupingDescriptor.setValue( "value", convertAnnotationsMap.values().toArray( new Convert[convertAnnotationsMap.size()]) );
|
groupingDescriptor.setValue(
|
||||||
|
"value",
|
||||||
|
convertAnnotationsMap.values().toArray( new Convert[0] )
|
||||||
|
);
|
||||||
return AnnotationFactory.create( groupingDescriptor );
|
return AnnotationFactory.create( groupingDescriptor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,7 +572,10 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
|
|
||||||
if ( !convertAnnotationsMap.isEmpty() ) {
|
if ( !convertAnnotationsMap.isEmpty() ) {
|
||||||
final AnnotationDescriptor groupingDescriptor = new AnnotationDescriptor( Converts.class );
|
final AnnotationDescriptor groupingDescriptor = new AnnotationDescriptor( Converts.class );
|
||||||
groupingDescriptor.setValue( "value", convertAnnotationsMap.values().toArray( new Convert[convertAnnotationsMap.size()]) );
|
groupingDescriptor.setValue(
|
||||||
|
"value",
|
||||||
|
convertAnnotationsMap.values().toArray( new Convert[0] )
|
||||||
|
);
|
||||||
return AnnotationFactory.create( groupingDescriptor );
|
return AnnotationFactory.create( groupingDescriptor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,7 +599,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
defaults
|
defaults
|
||||||
);
|
);
|
||||||
try {
|
try {
|
||||||
final Class converterClass = classLoaderAccess.classForName( converterClassName );
|
final Class<?> converterClass = classLoaderAccess.classForName( converterClassName );
|
||||||
convertAnnotationDescriptor.setValue( "converter", converterClass );
|
convertAnnotationDescriptor.setValue( "converter", converterClass );
|
||||||
}
|
}
|
||||||
catch (ClassLoadingException e) {
|
catch (ClassLoadingException e) {
|
||||||
|
@ -644,7 +639,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
if ( physicalAnnotation != null ) {
|
if ( physicalAnnotation != null ) {
|
||||||
// only add if no XML element named a converter for this attribute
|
// only add if no XML element named a converter for this attribute
|
||||||
final String qualifiedAttributeName = qualifyConverterAttributeName( attributeNamePrefix, physicalAnnotation.attributeName() );
|
final String qualifiedAttributeName = qualifyConverterAttributeName( attributeNamePrefix, physicalAnnotation.attributeName() );
|
||||||
if ( ! convertAnnotationsMap.containsKey( qualifiedAttributeName ) ) {
|
if ( !convertAnnotationsMap.containsKey( qualifiedAttributeName ) ) {
|
||||||
convertAnnotationsMap.put( qualifiedAttributeName, physicalAnnotation );
|
convertAnnotationsMap.put( qualifiedAttributeName, physicalAnnotation );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -653,7 +648,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
for ( Convert convertAnnotation : physicalGroupingAnnotation.value() ) {
|
for ( Convert convertAnnotation : physicalGroupingAnnotation.value() ) {
|
||||||
// again, only add if no XML element named a converter for this attribute
|
// again, only add if no XML element named a converter for this attribute
|
||||||
final String qualifiedAttributeName = qualifyConverterAttributeName( attributeNamePrefix, convertAnnotation.attributeName() );
|
final String qualifiedAttributeName = qualifyConverterAttributeName( attributeNamePrefix, convertAnnotation.attributeName() );
|
||||||
if ( ! convertAnnotationsMap.containsKey( qualifiedAttributeName ) ) {
|
if ( !convertAnnotationsMap.containsKey( qualifiedAttributeName ) ) {
|
||||||
convertAnnotationsMap.put( qualifiedAttributeName, convertAnnotation );
|
convertAnnotationsMap.put( qualifiedAttributeName, convertAnnotation );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -661,12 +656,13 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkForOrphanProperties(ManagedType root) {
|
private void checkForOrphanProperties(ManagedType root) {
|
||||||
Class clazz;
|
Class<?> clazz;
|
||||||
try {
|
try {
|
||||||
clazz = classLoaderAccess.classForName( className );
|
clazz = classLoaderAccess.classForName( className );
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
return; //a primitive type most likely
|
//a primitive type most likely
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
AttributesContainer container = root != null ? root.getAttributes() : null;
|
AttributesContainer container = root != null ? root.getAttributes() : null;
|
||||||
//put entity.attributes elements
|
//put entity.attributes elements
|
||||||
|
@ -703,14 +699,18 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> void checkForOrphanProperties(List<T> elements, Set<String> properties,
|
private <T> void checkForOrphanProperties(
|
||||||
|
List<T> elements,
|
||||||
|
Set<String> properties,
|
||||||
Function<? super T, String> nameGetter) {
|
Function<? super T, String> nameGetter) {
|
||||||
for ( T element : elements ) {
|
for ( T element : elements ) {
|
||||||
checkForOrphanProperties( element, properties, nameGetter );
|
checkForOrphanProperties( element, properties, nameGetter );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> void checkForOrphanProperties(T element, Set<String> properties,
|
private <T> void checkForOrphanProperties(
|
||||||
|
T element,
|
||||||
|
Set<String> properties,
|
||||||
Function<? super T, String> nameGetter) {
|
Function<? super T, String> nameGetter) {
|
||||||
if ( element == null ) {
|
if ( element == null ) {
|
||||||
return;
|
return;
|
||||||
|
@ -726,17 +726,14 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
*
|
*
|
||||||
* @param annotationList The list of annotations.
|
* @param annotationList The list of annotations.
|
||||||
* @param annotation The annotation to add to the list.
|
* @param annotation The annotation to add to the list.
|
||||||
*
|
|
||||||
* @return The annotation which was added to the list or {@code null}.
|
* @return The annotation which was added to the list or {@code null}.
|
||||||
*/
|
*/
|
||||||
private Annotation addIfNotNull(List<Annotation> annotationList, Annotation annotation) {
|
private void addIfNotNull(List<Annotation> annotationList, Annotation annotation) {
|
||||||
if ( annotation != null ) {
|
if ( annotation != null ) {
|
||||||
annotationList.add( annotation );
|
annotationList.add( annotation );
|
||||||
}
|
}
|
||||||
return annotation;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO mutualize the next 2 methods
|
|
||||||
private Annotation getTableGenerator(PropertyMappingElementCollector elementsForProperty, XMLContext.Default defaults) {
|
private Annotation getTableGenerator(PropertyMappingElementCollector elementsForProperty, XMLContext.Default defaults) {
|
||||||
for ( JaxbId element : elementsForProperty.getId() ) {
|
for ( JaxbId element : elementsForProperty.getId() ) {
|
||||||
JaxbTableGenerator subelement = element.getTableGenerator();
|
JaxbTableGenerator subelement = element.getTableGenerator();
|
||||||
|
@ -842,7 +839,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AnnotationDescriptor ad = new AnnotationDescriptor( EntityListeners.class );
|
AnnotationDescriptor ad = new AnnotationDescriptor( EntityListeners.class );
|
||||||
ad.setValue( "value", entityListenerClasses.toArray( new Class[0] ) );
|
ad.setValue( "value", entityListenerClasses.toArray( new Class[ 0 ] ) );
|
||||||
return AnnotationFactory.create( ad );
|
return AnnotationFactory.create( ad );
|
||||||
}
|
}
|
||||||
else if ( defaults.canUseJavaAnnotations() ) {
|
else if ( defaults.canUseJavaAnnotations() ) {
|
||||||
|
@ -943,7 +940,9 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
return annotation;
|
return annotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getJoinTable(List<Annotation> annotationList, AssociationAttribute associationAttribute,
|
private void getJoinTable(
|
||||||
|
List<Annotation> annotationList,
|
||||||
|
AssociationAttribute associationAttribute,
|
||||||
XMLContext.Default defaults) {
|
XMLContext.Default defaults) {
|
||||||
addIfNotNull( annotationList, buildJoinTable( associationAttribute.getJoinTable(), defaults ) );
|
addIfNotNull( annotationList, buildJoinTable( associationAttribute.getJoinTable(), defaults ) );
|
||||||
}
|
}
|
||||||
|
@ -1105,7 +1104,9 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
afterGetAssociation( ManyToAny.class, annotationList, defaults );
|
afterGetAssociation( ManyToAny.class, annotationList, defaults );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void afterGetAssociation(Class<? extends Annotation> annotationType, List<Annotation> annotationList,
|
private void afterGetAssociation(
|
||||||
|
Class<? extends Annotation> annotationType,
|
||||||
|
List<Annotation> annotationList,
|
||||||
XMLContext.Default defaults) {
|
XMLContext.Default defaults) {
|
||||||
if ( elementsForProperty.isEmpty() && defaults.canUseJavaAnnotations() ) {
|
if ( elementsForProperty.isEmpty() && defaults.canUseJavaAnnotations() ) {
|
||||||
Annotation annotation = getPhysicalAnnotation( annotationType );
|
Annotation annotation = getPhysicalAnnotation( annotationType );
|
||||||
|
@ -1229,7 +1230,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
joinColumns.add( AnnotationFactory.create( column ) );
|
joinColumns.add( AnnotationFactory.create( column ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return joinColumns.toArray( new MapKeyJoinColumn[0] );
|
return joinColumns.toArray( new MapKeyJoinColumn[ 0 ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
private AttributeOverrides getMapKeyAttributeOverrides(List<JaxbAttributeOverride> elements, XMLContext.Default defaults) {
|
private AttributeOverrides getMapKeyAttributeOverrides(List<JaxbAttributeOverride> elements, XMLContext.Default defaults) {
|
||||||
|
@ -1273,6 +1274,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a @MapKeyEnumerated annotation to the specified annotationList if the specified element
|
* Adds a @MapKeyEnumerated annotation to the specified annotationList if the specified element
|
||||||
* contains a map-key-enumerated sub-element. This should only be the case for
|
* contains a map-key-enumerated sub-element. This should only be the case for
|
||||||
|
@ -1347,10 +1349,8 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
try {
|
try {
|
||||||
clazz = classLoaderAccess.classForName( XMLContext.buildSafeClassName( className, defaults ) );
|
clazz = classLoaderAccess.classForName( XMLContext.buildSafeClassName( className, defaults ) );
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
throw new AnnotationException(
|
throw new AnnotationException( "Unable to find " + nodeName + ": " + className, e );
|
||||||
"Unable to find " + nodeName + ": " + className, e
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
ad.setValue( getJavaAttributeNameFromXMLOne( nodeName ), clazz );
|
ad.setValue( getJavaAttributeNameFromXMLOne( nodeName ), clazz );
|
||||||
}
|
}
|
||||||
|
@ -1436,13 +1436,13 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
String mapKeyClassName = element.getClazz();
|
String mapKeyClassName = element.getClazz();
|
||||||
AnnotationDescriptor ad = new AnnotationDescriptor( MapKeyClass.class );
|
AnnotationDescriptor ad = new AnnotationDescriptor( MapKeyClass.class );
|
||||||
if ( isNotEmpty( mapKeyClassName ) ) {
|
if ( isNotEmpty( mapKeyClassName ) ) {
|
||||||
Class clazz;
|
Class<?> clazz;
|
||||||
try {
|
try {
|
||||||
clazz = classLoaderAccess.classForName(
|
clazz = classLoaderAccess.classForName(
|
||||||
XMLContext.buildSafeClassName( mapKeyClassName, defaults )
|
XMLContext.buildSafeClassName( mapKeyClassName, defaults )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
throw new AnnotationException(
|
throw new AnnotationException(
|
||||||
"Unable to find " + nodeName + ": " + mapKeyClassName, e
|
"Unable to find " + nodeName + ": " + mapKeyClassName, e
|
||||||
);
|
);
|
||||||
|
@ -1513,7 +1513,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
cascades.add( CascadeType.PERSIST );
|
cascades.add( CascadeType.PERSIST );
|
||||||
}
|
}
|
||||||
if ( cascades.size() > 0 ) {
|
if ( cascades.size() > 0 ) {
|
||||||
ad.setValue( "cascade", cascades.toArray( new CascadeType[cascades.size()] ) );
|
ad.setValue( "cascade", cascades.toArray( new CascadeType[0] ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1742,17 +1742,12 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
|
|
||||||
private boolean isProcessingId(XMLContext.Default defaults) {
|
private boolean isProcessingId(XMLContext.Default defaults) {
|
||||||
boolean isExplicit = defaults.getAccess() != null;
|
boolean isExplicit = defaults.getAccess() != null;
|
||||||
boolean correctAccess =
|
boolean correctAccess = ( PropertyType.PROPERTY.equals( propertyType ) && AccessType.PROPERTY.equals( defaults.getAccess() ) )
|
||||||
( PropertyType.PROPERTY.equals( propertyType ) && AccessType.PROPERTY.equals( defaults.getAccess() ) )
|
|| ( PropertyType.FIELD.equals( propertyType ) && AccessType.FIELD.equals( defaults.getAccess() ) );
|
||||||
|| ( PropertyType.FIELD.equals( propertyType ) && AccessType.FIELD
|
|
||||||
.equals( defaults.getAccess() ) );
|
|
||||||
boolean hasId = defaults.canUseJavaAnnotations()
|
boolean hasId = defaults.canUseJavaAnnotations()
|
||||||
&& ( isPhysicalAnnotationPresent( Id.class ) || isPhysicalAnnotationPresent( EmbeddedId.class ) );
|
&& ( isPhysicalAnnotationPresent( Id.class ) || isPhysicalAnnotationPresent( EmbeddedId.class ) );
|
||||||
//if ( properAccessOnMetadataComplete || properOverridingOnMetadataNonComplete ) {
|
boolean mirrorAttributeIsId = defaults.canUseJavaAnnotations()
|
||||||
boolean mirrorAttributeIsId = defaults.canUseJavaAnnotations() &&
|
&& hasAnnotation( mirroredAttribute, Id.class, EmbeddedId.class );
|
||||||
( mirroredAttribute != null &&
|
|
||||||
( mirroredAttribute.isAnnotationPresent( Id.class )
|
|
||||||
|| mirroredAttribute.isAnnotationPresent( EmbeddedId.class ) ) );
|
|
||||||
boolean propertyIsDefault = PropertyType.PROPERTY.equals( propertyType )
|
boolean propertyIsDefault = PropertyType.PROPERTY.equals( propertyType )
|
||||||
&& !mirrorAttributeIsId;
|
&& !mirrorAttributeIsId;
|
||||||
return correctAccess || ( !isExplicit && hasId ) || ( !isExplicit && propertyIsDefault );
|
return correctAccess || ( !isExplicit && hasId ) || ( !isExplicit && propertyIsDefault );
|
||||||
|
@ -1765,7 +1760,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
List<Column> columns = new ArrayList<>( 1 );
|
List<Column> columns = new ArrayList<>( 1 );
|
||||||
columns.add( getColumn( element, false, nodeName ) );
|
columns.add( getColumn( element, false, nodeName ) );
|
||||||
AnnotationDescriptor columnsDescr = new AnnotationDescriptor( Columns.class );
|
AnnotationDescriptor columnsDescr = new AnnotationDescriptor( Columns.class );
|
||||||
columnsDescr.setValue( "columns", columns.toArray( new Column[ columns.size() ] ) );
|
columnsDescr.setValue( "columns", columns.toArray( new Column[0] ) );
|
||||||
return AnnotationFactory.create( columnsDescr );
|
return AnnotationFactory.create( columnsDescr );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1836,7 +1831,9 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
* element, if present and not disabled by the XMLContext defaults.
|
* element, if present and not disabled by the XMLContext defaults.
|
||||||
* In some contexts (such as an element-collection mapping) merging
|
* In some contexts (such as an element-collection mapping) merging
|
||||||
*/
|
*/
|
||||||
private AssociationOverrides getAssociationOverrides(List<JaxbAssociationOverride> elements, XMLContext.Default defaults,
|
private AssociationOverrides getAssociationOverrides(
|
||||||
|
List<JaxbAssociationOverride> elements,
|
||||||
|
XMLContext.Default defaults,
|
||||||
boolean mergeWithAnnotations) {
|
boolean mergeWithAnnotations) {
|
||||||
List<AssociationOverride> attributes = buildAssociationOverrides( elements, defaults );
|
List<AssociationOverride> attributes = buildAssociationOverrides( elements, defaults );
|
||||||
if ( mergeWithAnnotations && defaults.canUseJavaAnnotations() ) {
|
if ( mergeWithAnnotations && defaults.canUseJavaAnnotations() ) {
|
||||||
|
@ -1851,7 +1848,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
if ( attributes.size() > 0 ) {
|
if ( attributes.size() > 0 ) {
|
||||||
AnnotationDescriptor ad = new AnnotationDescriptor( AssociationOverrides.class );
|
AnnotationDescriptor ad = new AnnotationDescriptor( AssociationOverrides.class );
|
||||||
ad.setValue( "value", attributes.toArray( new AssociationOverride[attributes.size()] ) );
|
ad.setValue( "value", attributes.toArray( new AssociationOverride[0] ) );
|
||||||
return AnnotationFactory.create( ad );
|
return AnnotationFactory.create( ad );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1892,7 +1889,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
joinColumns.add( AnnotationFactory.create( column ) );
|
joinColumns.add( AnnotationFactory.create( column ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return joinColumns.toArray( new JoinColumn[joinColumns.size()] );
|
return joinColumns.toArray( new JoinColumn[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addAssociationOverrideIfNeeded(AssociationOverride annotation, List<AssociationOverride> overrides) {
|
private void addAssociationOverrideIfNeeded(AssociationOverride annotation, List<AssociationOverride> overrides) {
|
||||||
|
@ -1924,7 +1921,9 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
* In some contexts (such as an association mapping) merging with
|
* In some contexts (such as an association mapping) merging with
|
||||||
* annotations is never allowed.
|
* annotations is never allowed.
|
||||||
*/
|
*/
|
||||||
private AttributeOverrides getAttributeOverrides(List<JaxbAttributeOverride> elements, XMLContext.Default defaults,
|
private AttributeOverrides getAttributeOverrides(
|
||||||
|
List<JaxbAttributeOverride> elements,
|
||||||
|
XMLContext.Default defaults,
|
||||||
boolean mergeWithAnnotations) {
|
boolean mergeWithAnnotations) {
|
||||||
List<AttributeOverride> attributes = buildAttributeOverrides( elements, "attribute-override" );
|
List<AttributeOverride> attributes = buildAttributeOverrides( elements, "attribute-override" );
|
||||||
return mergeAttributeOverrides( defaults, attributes, mergeWithAnnotations );
|
return mergeAttributeOverrides( defaults, attributes, mergeWithAnnotations );
|
||||||
|
@ -1949,7 +1948,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
if ( attributes.size() > 0 ) {
|
if ( attributes.size() > 0 ) {
|
||||||
AnnotationDescriptor ad = new AnnotationDescriptor( AttributeOverrides.class );
|
AnnotationDescriptor ad = new AnnotationDescriptor( AttributeOverrides.class );
|
||||||
ad.setValue( "value", attributes.toArray( new AttributeOverride[attributes.size()] ) );
|
ad.setValue( "value", attributes.toArray( new AttributeOverride[ attributes.size() ] ) );
|
||||||
return AnnotationFactory.create( ad );
|
return AnnotationFactory.create( ad );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -1984,7 +1983,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
copyAttribute( column, "length", element.getLength(), false );
|
copyAttribute( column, "length", element.getLength(), false );
|
||||||
copyAttribute( column, "precision", element.getPrecision(), false );
|
copyAttribute( column, "precision", element.getPrecision(), false );
|
||||||
copyAttribute( column, "scale", element.getScale(), false );
|
copyAttribute( column, "scale", element.getScale(), false );
|
||||||
return (Column) AnnotationFactory.create( column );
|
return AnnotationFactory.create( column );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if ( isMandatory ) {
|
if ( isMandatory ) {
|
||||||
|
@ -2050,7 +2049,9 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Annotation getMarkerAnnotation(Class<? extends Annotation> clazz, JaxbEmptyType element,
|
private Annotation getMarkerAnnotation(
|
||||||
|
Class<? extends Annotation> clazz,
|
||||||
|
JaxbEmptyType element,
|
||||||
XMLContext.Default defaults) {
|
XMLContext.Default defaults) {
|
||||||
if ( element != null ) {
|
if ( element != null ) {
|
||||||
return AnnotationFactory.create( new AnnotationDescriptor( clazz ) );
|
return AnnotationFactory.create( new AnnotationDescriptor( clazz ) );
|
||||||
|
@ -2080,7 +2081,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
}
|
}
|
||||||
if ( results.size() > 0 ) {
|
if ( results.size() > 0 ) {
|
||||||
AnnotationDescriptor ad = new AnnotationDescriptor( SqlResultSetMappings.class );
|
AnnotationDescriptor ad = new AnnotationDescriptor( SqlResultSetMappings.class );
|
||||||
ad.setValue( "value", results.toArray( new SqlResultSetMapping[results.size()] ) );
|
ad.setValue( "value", results.toArray( new SqlResultSetMapping[ results.size() ] ) );
|
||||||
return AnnotationFactory.create( ad );
|
return AnnotationFactory.create( ad );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -2103,7 +2104,6 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
bindNamedSubgraph( defaults, ann, "subclassSubgraphs", element.getSubclassSubgraph(), classLoaderAccess );
|
bindNamedSubgraph( defaults, ann, "subclassSubgraphs", element.getSubclassSubgraph(), classLoaderAccess );
|
||||||
namedEntityGraphList.add( AnnotationFactory.create( ann ) );
|
namedEntityGraphList.add( AnnotationFactory.create( ann ) );
|
||||||
}
|
}
|
||||||
//TODO
|
|
||||||
return namedEntityGraphList;
|
return namedEntityGraphList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2118,17 +2118,17 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
AnnotationDescriptor annSubgraphNode = new AnnotationDescriptor( NamedSubgraph.class );
|
AnnotationDescriptor annSubgraphNode = new AnnotationDescriptor( NamedSubgraph.class );
|
||||||
copyAttribute( annSubgraphNode, "name", subgraphNode.getName(), true );
|
copyAttribute( annSubgraphNode, "name", subgraphNode.getName(), true );
|
||||||
String clazzName = subgraphNode.getClazz();
|
String clazzName = subgraphNode.getClazz();
|
||||||
Class clazz;
|
final Class<?> clazz;
|
||||||
try {
|
try {
|
||||||
clazz = classLoaderAccess.classForName(
|
clazz = classLoaderAccess.classForName(
|
||||||
XMLContext.buildSafeClassName( clazzName, defaults )
|
XMLContext.buildSafeClassName( clazzName, defaults )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
|
throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
|
||||||
}
|
}
|
||||||
annSubgraphNode.setValue( "type", clazz );
|
annSubgraphNode.setValue( "type", clazz );
|
||||||
bindNamedAttributeNodes(subgraphNode.getNamedAttributeNode(), annSubgraphNode);
|
bindNamedAttributeNodes( subgraphNode.getNamedAttributeNode(), annSubgraphNode );
|
||||||
annSubgraphNodes.add( AnnotationFactory.create( annSubgraphNode ) );
|
annSubgraphNodes.add( AnnotationFactory.create( annSubgraphNode ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2144,7 +2144,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
copyAttribute( annNamedAttributeNode, "key-subgraph", element.getKeySubgraph(), false );
|
copyAttribute( annNamedAttributeNode, "key-subgraph", element.getKeySubgraph(), false );
|
||||||
annNamedAttributeNodes.add( AnnotationFactory.create( annNamedAttributeNode ) );
|
annNamedAttributeNodes.add( AnnotationFactory.create( annNamedAttributeNode ) );
|
||||||
}
|
}
|
||||||
ann.setValue( "attributeNodes", annNamedAttributeNodes.toArray( new NamedAttributeNode[0] ) );
|
ann.setValue( "attributeNodes", annNamedAttributeNodes.toArray( new NamedAttributeNode[ 0 ] ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<NamedStoredProcedureQuery> buildNamedStoreProcedureQueries(
|
public static List<NamedStoredProcedureQuery> buildNamedStoreProcedureQueries(
|
||||||
|
@ -2176,7 +2176,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
XMLContext.buildSafeClassName( clazzName, defaults )
|
XMLContext.buildSafeClassName( clazzName, defaults )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
|
throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
|
||||||
}
|
}
|
||||||
parameterDescriptor.setValue( "type", clazz );
|
parameterDescriptor.setValue( "type", clazz );
|
||||||
|
@ -2185,26 +2185,26 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
|
|
||||||
ann.setValue(
|
ann.setValue(
|
||||||
"parameters",
|
"parameters",
|
||||||
storedProcedureParameters.toArray( new StoredProcedureParameter[0] )
|
storedProcedureParameters.toArray( new StoredProcedureParameter[ 0 ] )
|
||||||
);
|
);
|
||||||
|
|
||||||
List<Class<?>> returnClasses = new ArrayList<>();
|
final List<Class<?>> returnClasses = new ArrayList<>();
|
||||||
for ( String clazzName : element.getResultClass() ) {
|
for ( String clazzName : element.getResultClass() ) {
|
||||||
Class<?> clazz;
|
final Class<?> clazz;
|
||||||
try {
|
try {
|
||||||
clazz = classLoaderAccess.classForName(
|
clazz = classLoaderAccess.classForName(
|
||||||
XMLContext.buildSafeClassName( clazzName, defaults )
|
XMLContext.buildSafeClassName( clazzName, defaults )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
|
throw new AnnotationException( "Unable to find entity-class: " + clazzName, e );
|
||||||
}
|
}
|
||||||
returnClasses.add( clazz );
|
returnClasses.add( clazz );
|
||||||
}
|
}
|
||||||
ann.setValue( "resultClasses", returnClasses.toArray( new Class[0] ) );
|
ann.setValue( "resultClasses", returnClasses.toArray( new Class[ 0 ] ) );
|
||||||
|
|
||||||
|
|
||||||
ann.setValue( "resultSetMappings", element.getResultSetMapping().toArray( new String[0] ) );
|
ann.setValue( "resultSetMappings", element.getResultSetMapping().toArray( new String[ 0 ] ) );
|
||||||
buildQueryHints( element.getHint(), ann, Collections.emptyMap() );
|
buildQueryHints( element.getHint(), ann, Collections.emptyMap() );
|
||||||
namedStoredProcedureQueries.add( AnnotationFactory.create( ann ) );
|
namedStoredProcedureQueries.add( AnnotationFactory.create( ann ) );
|
||||||
}
|
}
|
||||||
|
@ -2255,19 +2255,19 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
if ( entityResultAnnotations != null && !entityResultAnnotations.isEmpty() ) {
|
if ( entityResultAnnotations != null && !entityResultAnnotations.isEmpty() ) {
|
||||||
resultSetMappingAnnotation.setValue(
|
resultSetMappingAnnotation.setValue(
|
||||||
"entities",
|
"entities",
|
||||||
entityResultAnnotations.toArray( new EntityResult[entityResultAnnotations.size()] )
|
entityResultAnnotations.toArray( new EntityResult[ entityResultAnnotations.size() ] )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ( columnResultAnnotations != null && !columnResultAnnotations.isEmpty() ) {
|
if ( columnResultAnnotations != null && !columnResultAnnotations.isEmpty() ) {
|
||||||
resultSetMappingAnnotation.setValue(
|
resultSetMappingAnnotation.setValue(
|
||||||
"columns",
|
"columns",
|
||||||
columnResultAnnotations.toArray( new ColumnResult[columnResultAnnotations.size()] )
|
columnResultAnnotations.toArray( new ColumnResult[ columnResultAnnotations.size() ] )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ( constructorResultAnnotations != null && !constructorResultAnnotations.isEmpty() ) {
|
if ( constructorResultAnnotations != null && !constructorResultAnnotations.isEmpty() ) {
|
||||||
resultSetMappingAnnotation.setValue(
|
resultSetMappingAnnotation.setValue(
|
||||||
"classes",
|
"classes",
|
||||||
constructorResultAnnotations.toArray( new ConstructorResult[constructorResultAnnotations.size()] )
|
constructorResultAnnotations.toArray( new ConstructorResult[ constructorResultAnnotations.size() ] )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2297,12 +2297,13 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
fieldResultAnnotations.add( AnnotationFactory.create( fieldResultDescriptor ) );
|
fieldResultAnnotations.add( AnnotationFactory.create( fieldResultDescriptor ) );
|
||||||
}
|
}
|
||||||
entityResultDescriptor.setValue(
|
entityResultDescriptor.setValue(
|
||||||
"fields", fieldResultAnnotations.toArray( new FieldResult[fieldResultAnnotations.size()] )
|
"fields",
|
||||||
|
fieldResultAnnotations.toArray( new FieldResult[ fieldResultAnnotations.size() ] )
|
||||||
);
|
);
|
||||||
return AnnotationFactory.create( entityResultDescriptor );
|
return AnnotationFactory.create( entityResultDescriptor );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Class resolveClassReference(
|
private static Class<?> resolveClassReference(
|
||||||
String className,
|
String className,
|
||||||
XMLContext.Default defaults,
|
XMLContext.Default defaults,
|
||||||
ClassLoaderAccess classLoaderAccess) {
|
ClassLoaderAccess classLoaderAccess) {
|
||||||
|
@ -2314,7 +2315,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
XMLContext.buildSafeClassName( className, defaults )
|
XMLContext.buildSafeClassName( className, defaults )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
throw new AnnotationException( "Unable to find specified class: " + className, e );
|
throw new AnnotationException( "Unable to find specified class: " + className, e );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2338,7 +2339,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
ClassLoaderAccess classLoaderAccess) {
|
ClassLoaderAccess classLoaderAccess) {
|
||||||
AnnotationDescriptor constructorResultDescriptor = new AnnotationDescriptor( ConstructorResult.class );
|
AnnotationDescriptor constructorResultDescriptor = new AnnotationDescriptor( ConstructorResult.class );
|
||||||
|
|
||||||
final Class entityClass = resolveClassReference( constructorResultElement.getTargetClass(), defaults, classLoaderAccess );
|
final Class<?> entityClass = resolveClassReference( constructorResultElement.getTargetClass(), defaults, classLoaderAccess );
|
||||||
constructorResultDescriptor.setValue( "targetClass", entityClass );
|
constructorResultDescriptor.setValue( "targetClass", entityClass );
|
||||||
|
|
||||||
List<ColumnResult> columnResultAnnotations = new ArrayList<>();
|
List<ColumnResult> columnResultAnnotations = new ArrayList<>();
|
||||||
|
@ -2815,7 +2816,7 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
try {
|
try {
|
||||||
clazz = classLoaderAccess.classForName( XMLContext.buildSafeClassName( className, defaults ) );
|
clazz = classLoaderAccess.classForName( XMLContext.buildSafeClassName( className, defaults ) );
|
||||||
}
|
}
|
||||||
catch ( ClassLoadingException e ) {
|
catch (ClassLoadingException e) {
|
||||||
throw new AnnotationException( "Unable to find id-class: " + className, e );
|
throw new AnnotationException( "Unable to find id-class: " + className, e );
|
||||||
}
|
}
|
||||||
ad.setValue( "value", clazz );
|
ad.setValue( "value", clazz );
|
||||||
|
@ -2921,7 +2922,8 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
return AnnotationFactory.create( entity );
|
return AnnotationFactory.create( entity );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return null; //this is not an entity
|
//this is not an entity
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3081,7 +3083,8 @@ public class JPAXMLOverriddenAnnotationReader implements AnnotationReader {
|
||||||
annotation.setValue( "indexes", indexes );
|
annotation.setValue( "indexes", indexes );
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void buildUniqueConstraints(AnnotationDescriptor annotation,
|
private static void buildUniqueConstraints(
|
||||||
|
AnnotationDescriptor annotation,
|
||||||
List<JaxbUniqueConstraint> elements) {
|
List<JaxbUniqueConstraint> elements) {
|
||||||
UniqueConstraint[] uniqueConstraints = new UniqueConstraint[ elements.size() ];
|
UniqueConstraint[] uniqueConstraints = new UniqueConstraint[ elements.size() ];
|
||||||
int i = 0;
|
int i = 0;
|
|
@ -4,7 +4,7 @@
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations.reflection.internal;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.reflect.AnnotatedElement;
|
import java.lang.reflect.AnnotatedElement;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
|
@ -2,15 +2,14 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.TableBinder;
|
|
||||||
import org.hibernate.mapping.JoinedSubclass;
|
import org.hibernate.mapping.JoinedSubclass;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
|
@ -32,14 +31,17 @@ public class JoinedSubclassFkSecondPass extends FkSecondPass {
|
||||||
this.buildingContext = buildingContext;
|
this.buildingContext = buildingContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getReferencedEntityName() {
|
public String getReferencedEntityName() {
|
||||||
return entity.getSuperclass().getEntityName();
|
return entity.getSuperclass().getEntityName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isInPrimaryKey() {
|
public boolean isInPrimaryKey() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
TableBinder.bindForeignKey( entity.getSuperclass(), entity, columns, value, false, buildingContext );
|
TableBinder.bindForeignKey( entity.getSuperclass(), entity, columns, value, false, buildingContext );
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
@ -13,10 +13,7 @@ import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.OrderBy;
|
import org.hibernate.annotations.OrderBy;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.CollectionSecondPass;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
|
||||||
import org.hibernate.cfg.PropertyHolderBuilder;
|
|
||||||
import org.hibernate.cfg.SecondPass;
|
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
import org.hibernate.mapping.IndexBackref;
|
import org.hibernate.mapping.IndexBackref;
|
||||||
import org.hibernate.mapping.List;
|
import org.hibernate.mapping.List;
|
||||||
|
@ -62,8 +59,7 @@ public class ListBinder extends CollectionBinder {
|
||||||
public SecondPass getSecondPass() {
|
public SecondPass getSecondPass() {
|
||||||
return new CollectionSecondPass( ListBinder.this.collection ) {
|
return new CollectionSecondPass( ListBinder.this.collection ) {
|
||||||
@Override
|
@Override
|
||||||
public void secondPass(Map<String, PersistentClass> persistentClasses)
|
public void secondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
throws MappingException {
|
|
||||||
bindStarToManySecondPass( persistentClasses );
|
bindStarToManySecondPass( persistentClasses );
|
||||||
bindIndex();
|
bindIndex();
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
@ -16,19 +16,10 @@ import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.MapKeyCompositeType;
|
import org.hibernate.annotations.MapKeyCompositeType;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.boot.spi.BootstrapContext;
|
import org.hibernate.boot.spi.BootstrapContext;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.AccessType;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.cfg.AnnotatedClassType;
|
|
||||||
import org.hibernate.cfg.AnnotatedColumns;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumns;
|
|
||||||
import org.hibernate.cfg.AnnotationBinder;
|
|
||||||
import org.hibernate.cfg.CollectionPropertyHolder;
|
|
||||||
import org.hibernate.cfg.CollectionSecondPass;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumn;
|
|
||||||
import org.hibernate.cfg.InheritanceState;
|
|
||||||
import org.hibernate.cfg.PropertyPreloadedData;
|
|
||||||
import org.hibernate.cfg.SecondPass;
|
|
||||||
import org.hibernate.engine.jdbc.Size;
|
import org.hibernate.engine.jdbc.Size;
|
||||||
import org.hibernate.mapping.BasicValue;
|
import org.hibernate.mapping.BasicValue;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
|
@ -58,10 +49,10 @@ import jakarta.persistence.MapKeyColumn;
|
||||||
import jakarta.persistence.MapKeyJoinColumn;
|
import jakarta.persistence.MapKeyJoinColumn;
|
||||||
import jakarta.persistence.MapKeyJoinColumns;
|
import jakarta.persistence.MapKeyJoinColumns;
|
||||||
|
|
||||||
import static org.hibernate.cfg.AnnotatedClassType.EMBEDDABLE;
|
import static org.hibernate.boot.model.internal.AnnotatedClassType.EMBEDDABLE;
|
||||||
import static org.hibernate.cfg.BinderHelper.findPropertyByName;
|
import static org.hibernate.boot.model.internal.BinderHelper.findPropertyByName;
|
||||||
import static org.hibernate.cfg.BinderHelper.isPrimitive;
|
import static org.hibernate.boot.model.internal.BinderHelper.isPrimitive;
|
||||||
import static org.hibernate.cfg.PropertyHolderBuilder.buildPropertyHolder;
|
import static org.hibernate.boot.model.internal.PropertyHolderBuilder.buildPropertyHolder;
|
||||||
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.qualify;
|
import static org.hibernate.internal.util.StringHelper.qualify;
|
||||||
|
|
|
@ -2,10 +2,12 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.MapKeyColumn;
|
import jakarta.persistence.MapKeyColumn;
|
||||||
|
|
||||||
|
@ -20,46 +22,57 @@ public class MapKeyColumnDelegator implements Column {
|
||||||
this.column = column;
|
this.column = column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String name() {
|
public String name() {
|
||||||
return column.name();
|
return column.name();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean unique() {
|
public boolean unique() {
|
||||||
return column.unique();
|
return column.unique();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean nullable() {
|
public boolean nullable() {
|
||||||
return column.nullable();
|
return column.nullable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean insertable() {
|
public boolean insertable() {
|
||||||
return column.insertable();
|
return column.insertable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean updatable() {
|
public boolean updatable() {
|
||||||
return column.updatable();
|
return column.updatable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String columnDefinition() {
|
public String columnDefinition() {
|
||||||
return column.columnDefinition();
|
return column.columnDefinition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String table() {
|
public String table() {
|
||||||
return column.table();
|
return column.table();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int length() {
|
public int length() {
|
||||||
return column.length();
|
return column.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int precision() {
|
public int precision() {
|
||||||
return column.precision();
|
return column.precision();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int scale() {
|
public int scale() {
|
||||||
return column.scale();
|
return column.scale();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Class<? extends Annotation> annotationType() {
|
public Class<? extends Annotation> annotationType() {
|
||||||
return Column.class;
|
return Column.class;
|
||||||
}
|
}
|
|
@ -2,11 +2,12 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.ForeignKey;
|
import jakarta.persistence.ForeignKey;
|
||||||
import jakarta.persistence.JoinColumn;
|
import jakarta.persistence.JoinColumn;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -2,14 +2,14 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.internal;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.SecondPass;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.Column;
|
import org.hibernate.mapping.Column;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.Selectable;
|
import org.hibernate.mapping.Selectable;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Source for database object names (identifiers).
|
* Source for database object names (identifiers).
|
|
@ -2,14 +2,12 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import jakarta.persistence.ForeignKey;
|
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.LazyGroup;
|
import org.hibernate.annotations.LazyGroup;
|
||||||
|
@ -18,7 +16,8 @@ import org.hibernate.annotations.OnDeleteAction;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.PropertyBinder;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.Column;
|
import org.hibernate.mapping.Column;
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
import org.hibernate.mapping.DependantValue;
|
import org.hibernate.mapping.DependantValue;
|
||||||
|
@ -31,10 +30,13 @@ import org.hibernate.mapping.Property;
|
||||||
import org.hibernate.mapping.SortableValue;
|
import org.hibernate.mapping.SortableValue;
|
||||||
import org.hibernate.type.ForeignKeyDirection;
|
import org.hibernate.type.ForeignKeyDirection;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.findPropertyByName;
|
import jakarta.persistence.ForeignKey;
|
||||||
import static org.hibernate.cfg.BinderHelper.getPath;
|
|
||||||
import static org.hibernate.cfg.ToOneBinder.bindForeignKeyNameAndDefinition;
|
import static org.hibernate.boot.model.internal.BinderHelper.findPropertyByName;
|
||||||
import static org.hibernate.cfg.ToOneBinder.getReferenceEntityName;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPath;
|
||||||
|
import static org.hibernate.boot.model.internal.ToOneBinder.bindForeignKeyNameAndDefinition;
|
||||||
|
import static org.hibernate.boot.model.internal.ToOneBinder.defineFetchingStrategy;
|
||||||
|
import static org.hibernate.boot.model.internal.ToOneBinder.getReferenceEntityName;
|
||||||
import static org.hibernate.internal.util.StringHelper.qualify;
|
import static org.hibernate.internal.util.StringHelper.qualify;
|
||||||
import static org.hibernate.type.ForeignKeyDirection.FROM_PARENT;
|
import static org.hibernate.type.ForeignKeyDirection.FROM_PARENT;
|
||||||
import static org.hibernate.type.ForeignKeyDirection.TO_PARENT;
|
import static org.hibernate.type.ForeignKeyDirection.TO_PARENT;
|
||||||
|
@ -47,7 +49,6 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
private final MetadataBuildingContext buildingContext;
|
private final MetadataBuildingContext buildingContext;
|
||||||
private final String mappedBy;
|
private final String mappedBy;
|
||||||
private final String ownerEntity;
|
private final String ownerEntity;
|
||||||
private final String ownerProperty;
|
|
||||||
private final PropertyHolder propertyHolder;
|
private final PropertyHolder propertyHolder;
|
||||||
private final NotFoundAction notFoundAction;
|
private final NotFoundAction notFoundAction;
|
||||||
private final PropertyData inferredData;
|
private final PropertyData inferredData;
|
||||||
|
@ -57,11 +58,10 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
private final String cascadeStrategy;
|
private final String cascadeStrategy;
|
||||||
private final AnnotatedJoinColumns joinColumns;
|
private final AnnotatedJoinColumns joinColumns;
|
||||||
|
|
||||||
//that sucks, we should read that from the property mainly
|
|
||||||
public OneToOneSecondPass(
|
public OneToOneSecondPass(
|
||||||
String mappedBy,
|
String mappedBy,
|
||||||
String ownerEntity,
|
String ownerEntity,
|
||||||
String ownerProperty,
|
@SuppressWarnings("unused") String ownerProperty,
|
||||||
PropertyHolder propertyHolder,
|
PropertyHolder propertyHolder,
|
||||||
PropertyData inferredData,
|
PropertyData inferredData,
|
||||||
XClass targetEntity,
|
XClass targetEntity,
|
||||||
|
@ -72,7 +72,6 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
AnnotatedJoinColumns columns,
|
AnnotatedJoinColumns columns,
|
||||||
MetadataBuildingContext buildingContext) {
|
MetadataBuildingContext buildingContext) {
|
||||||
this.ownerEntity = ownerEntity;
|
this.ownerEntity = ownerEntity;
|
||||||
this.ownerProperty = ownerProperty;
|
|
||||||
this.mappedBy = mappedBy;
|
this.mappedBy = mappedBy;
|
||||||
this.propertyHolder = propertyHolder;
|
this.propertyHolder = propertyHolder;
|
||||||
this.buildingContext = buildingContext;
|
this.buildingContext = buildingContext;
|
||||||
|
@ -85,7 +84,7 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
this.joinColumns = columns;
|
this.joinColumns = columns;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO refactor this code, there is a lot of duplication in this method
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
final OneToOne value = new OneToOne(
|
final OneToOne value = new OneToOne(
|
||||||
buildingContext,
|
buildingContext,
|
||||||
|
@ -97,7 +96,7 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
final String referencedEntityName = getReferenceEntityName( inferredData, targetEntity, buildingContext );
|
final String referencedEntityName = getReferenceEntityName( inferredData, targetEntity, buildingContext );
|
||||||
value.setReferencedEntityName( referencedEntityName );
|
value.setReferencedEntityName( referencedEntityName );
|
||||||
XProperty property = inferredData.getProperty();
|
XProperty property = inferredData.getProperty();
|
||||||
ToOneBinder.defineFetchingStrategy( value, property, inferredData, propertyHolder );
|
defineFetchingStrategy( value, property, inferredData, propertyHolder );
|
||||||
//value.setFetchMode( fetchMode );
|
//value.setFetchMode( fetchMode );
|
||||||
value.setOnDeleteAction( onDeleteAction );
|
value.setOnDeleteAction( onDeleteAction );
|
||||||
//value.setLazy( fetchMode != FetchMode.JOIN );
|
//value.setLazy( fetchMode != FetchMode.JOIN );
|
||||||
|
@ -174,7 +173,6 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
persistentClasses.get( ownerEntity ), targetProperty, otherSideJoin
|
persistentClasses.get( ownerEntity ), targetProperty, otherSideJoin
|
||||||
);
|
);
|
||||||
final ManyToOne manyToOne = new ManyToOne( buildingContext, mappedByJoin.getTable() );
|
final ManyToOne manyToOne = new ManyToOne( buildingContext, mappedByJoin.getTable() );
|
||||||
//FIXME use ignore not found here
|
|
||||||
manyToOne.setNotFoundAction( notFoundAction );
|
manyToOne.setNotFoundAction( notFoundAction );
|
||||||
manyToOne.setOnDeleteAction( oneToOne.getOnDeleteAction() );
|
manyToOne.setOnDeleteAction( oneToOne.getOnDeleteAction() );
|
||||||
manyToOne.setFetchMode( oneToOne.getFetchMode() );
|
manyToOne.setFetchMode( oneToOne.getFetchMode() );
|
||||||
|
@ -239,13 +237,6 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void bindOwned(Map<String, PersistentClass> persistentClasses, OneToOne oneToOne, String propertyName, Property property) {
|
private void bindOwned(Map<String, PersistentClass> persistentClasses, OneToOne oneToOne, String propertyName, Property property) {
|
||||||
// we need to check if the columns are in the right order
|
|
||||||
// if not, then we need to create a many to one and formula
|
|
||||||
// but actually, since entities linked by a one to one need
|
|
||||||
// to share the same composite id class, this cannot happen
|
|
||||||
// boolean rightOrder = true;
|
|
||||||
//
|
|
||||||
// if ( rightOrder ) {
|
|
||||||
final ToOneFkSecondPass secondPass = new ToOneFkSecondPass(
|
final ToOneFkSecondPass secondPass = new ToOneFkSecondPass(
|
||||||
oneToOne,
|
oneToOne,
|
||||||
joinColumns,
|
joinColumns,
|
||||||
|
@ -257,10 +248,6 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
secondPass.doSecondPass(persistentClasses);
|
secondPass.doSecondPass(persistentClasses);
|
||||||
//no column associated since it's a one to one
|
//no column associated since it's a one to one
|
||||||
propertyHolder.addProperty( property, inferredData.getDeclaringClass() );
|
propertyHolder.addProperty( property, inferredData.getDeclaringClass() );
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// this is a @ManyToOne with Formula
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -283,10 +270,9 @@ public class OneToOneSecondPass implements SecondPass {
|
||||||
join.disableForeignKeyCreation();
|
join.disableForeignKeyCreation();
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO support @ForeignKey
|
|
||||||
join.setKey( key );
|
join.setKey( key );
|
||||||
//TODO support for inverse and optional
|
//perhaps not quite per-spec, but a Good Thing anyway
|
||||||
join.setOptional( true ); //perhaps not quite per-spec, but a Good Thing anyway
|
join.setOptional( true );
|
||||||
key.setOnDeleteAction( null );
|
key.setOnDeleteAction( null );
|
||||||
for ( Column column: otherSideProperty.getValue().getColumns() ) {
|
for ( Column column: otherSideProperty.getValue().getColumns() ) {
|
||||||
Column copy = new Column();
|
Column copy = new Column();
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations.reflection;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.annotations.common.reflection.Filter;
|
import org.hibernate.annotations.common.reflection.Filter;
|
||||||
|
|
|
@ -2,14 +2,13 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.annotations.TableBinder;
|
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
|
@ -2,14 +2,15 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Member;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import jakarta.persistence.EmbeddedId;
|
|
||||||
import jakarta.persistence.Id;
|
|
||||||
import jakarta.persistence.Lob;
|
|
||||||
import jakarta.persistence.Version;
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
|
@ -22,14 +23,15 @@ import org.hibernate.annotations.OptimisticLock;
|
||||||
import org.hibernate.annotations.ValueGenerationType;
|
import org.hibernate.annotations.ValueGenerationType;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.binder.AttributeBinder;
|
||||||
import org.hibernate.boot.model.relational.ExportableProducer;
|
import org.hibernate.boot.model.relational.ExportableProducer;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.AccessType;
|
import org.hibernate.generator.AnnotationBasedGenerator;
|
||||||
import org.hibernate.cfg.AnnotatedColumns;
|
import org.hibernate.generator.BeforeExecutionGenerator;
|
||||||
import org.hibernate.cfg.AnnotationBinder;
|
import org.hibernate.generator.Generator;
|
||||||
import org.hibernate.cfg.InheritanceState;
|
import org.hibernate.generator.GeneratorCreationContext;
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
import org.hibernate.generator.OnExecutionGenerator;
|
||||||
import org.hibernate.cfg.PropertyPreloadedData;
|
|
||||||
import org.hibernate.id.IdentifierGenerator;
|
import org.hibernate.id.IdentifierGenerator;
|
||||||
import org.hibernate.id.factory.spi.CustomIdGeneratorCreationContext;
|
import org.hibernate.id.factory.spi.CustomIdGeneratorCreationContext;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
|
@ -45,21 +47,16 @@ import org.hibernate.mapping.ToOne;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
import org.hibernate.metamodel.spi.EmbeddableInstantiator;
|
import org.hibernate.metamodel.spi.EmbeddableInstantiator;
|
||||||
import org.hibernate.property.access.spi.PropertyAccessStrategy;
|
import org.hibernate.property.access.spi.PropertyAccessStrategy;
|
||||||
import org.hibernate.generator.AnnotationBasedGenerator;
|
|
||||||
import org.hibernate.generator.Generator;
|
|
||||||
import org.hibernate.binder.AttributeBinder;
|
|
||||||
import org.hibernate.generator.GeneratorCreationContext;
|
|
||||||
import org.hibernate.generator.OnExecutionGenerator;
|
|
||||||
import org.hibernate.generator.BeforeExecutionGenerator;
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import jakarta.persistence.EmbeddedId;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import jakarta.persistence.Id;
|
||||||
import java.lang.reflect.Member;
|
import jakarta.persistence.Lob;
|
||||||
import java.util.Map;
|
import jakarta.persistence.Version;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.getMappedSuperclassOrNull;
|
import static org.hibernate.boot.model.internal.BinderHelper.getMappedSuperclassOrNull;
|
||||||
import static org.hibernate.cfg.annotations.HCANNHelper.findContainingAnnotation;
|
import static org.hibernate.boot.model.internal.HCANNHelper.findContainingAnnotation;
|
||||||
import static org.hibernate.internal.util.StringHelper.qualify;
|
import static org.hibernate.internal.util.StringHelper.qualify;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -2,12 +2,12 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// $Id$
|
// $Id$
|
||||||
|
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -18,16 +18,16 @@ import java.util.Map;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.annotations.Type;
|
|
||||||
import org.hibernate.annotations.JavaType;
|
import org.hibernate.annotations.JavaType;
|
||||||
import org.hibernate.annotations.ManyToAny;
|
import org.hibernate.annotations.ManyToAny;
|
||||||
import org.hibernate.annotations.Target;
|
import org.hibernate.annotations.Target;
|
||||||
|
import org.hibernate.annotations.Type;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.MappingException;
|
import org.hibernate.boot.MappingException;
|
||||||
import org.hibernate.boot.jaxb.Origin;
|
import org.hibernate.boot.jaxb.Origin;
|
||||||
import org.hibernate.boot.jaxb.SourceType;
|
import org.hibernate.boot.jaxb.SourceType;
|
||||||
import org.hibernate.cfg.annotations.HCANNHelper;
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
|
@ -47,7 +47,7 @@ import jakarta.persistence.Transient;
|
||||||
*
|
*
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
class PropertyContainer {
|
public class PropertyContainer {
|
||||||
|
|
||||||
private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, PropertyContainer.class.getName());
|
private static final CoreMessageLogger LOG = Logger.getMessageLogger(CoreMessageLogger.class, PropertyContainer.class.getName());
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ class PropertyContainer {
|
||||||
|
|
||||||
private final List<XProperty> persistentAttributes;
|
private final List<XProperty> persistentAttributes;
|
||||||
|
|
||||||
PropertyContainer(XClass clazz, XClass entityAtStake, AccessType defaultClassLevelAccessType) {
|
public PropertyContainer(XClass clazz, XClass entityAtStake, AccessType defaultClassLevelAccessType) {
|
||||||
this.xClass = clazz;
|
this.xClass = clazz;
|
||||||
this.entityAtStake = entityAtStake;
|
this.entityAtStake = entityAtStake;
|
||||||
|
|
|
@ -2,14 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
|
||||||
import jakarta.persistence.ForeignKey;
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
|
|
||||||
import org.hibernate.annotations.ColumnTransformer;
|
import org.hibernate.annotations.ColumnTransformer;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
|
@ -21,6 +16,11 @@ import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.Property;
|
import org.hibernate.mapping.Property;
|
||||||
import org.hibernate.mapping.Table;
|
import org.hibernate.mapping.Table;
|
||||||
|
|
||||||
|
import jakarta.persistence.Column;
|
||||||
|
import jakarta.persistence.ForeignKey;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property holder abstract property containers from their direct implementation
|
* Property holder abstract property containers from their direct implementation
|
||||||
*
|
*
|
|
@ -2,16 +2,16 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
import org.hibernate.mapping.Join;
|
import org.hibernate.mapping.Join;
|
|
@ -2,17 +2,19 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import jakarta.persistence.Access;
|
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.Target;
|
import org.hibernate.annotations.Target;
|
||||||
import org.hibernate.annotations.common.reflection.ReflectionManager;
|
import org.hibernate.annotations.common.reflection.ReflectionManager;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
|
|
||||||
|
import jakarta.persistence.Access;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve all inferred data from an annotated element
|
* Retrieve all inferred data from an annotated element
|
||||||
|
@ -27,11 +29,6 @@ public class PropertyInferredData implements PropertyData {
|
||||||
private final ReflectionManager reflectionManager;
|
private final ReflectionManager reflectionManager;
|
||||||
private final XClass declaringClass;
|
private final XClass declaringClass;
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return String.format( "PropertyInferredData{property=%s, declaringClass=%s}", property, declaringClass );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Take the annotated element for lazy process
|
* Take the annotated element for lazy process
|
||||||
*/
|
*/
|
||||||
|
@ -42,6 +39,12 @@ public class PropertyInferredData implements PropertyData {
|
||||||
this.reflectionManager = reflectionManager;
|
this.reflectionManager = reflectionManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return String.format( "PropertyInferredData{property=%s, declaringClass=%s}", property, declaringClass );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public AccessType getDefaultAccess() throws MappingException {
|
public AccessType getDefaultAccess() throws MappingException {
|
||||||
AccessType accessType = defaultAccess;
|
AccessType accessType = defaultAccess;
|
||||||
|
|
||||||
|
@ -58,10 +61,12 @@ public class PropertyInferredData implements PropertyData {
|
||||||
return accessType;
|
return accessType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getPropertyName() throws MappingException {
|
public String getPropertyName() throws MappingException {
|
||||||
return property.getName();
|
return property.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XClass getPropertyClass() throws MappingException {
|
public XClass getPropertyClass() throws MappingException {
|
||||||
if ( property.isAnnotationPresent( Target.class ) ) {
|
if ( property.isAnnotationPresent( Target.class ) ) {
|
||||||
return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
|
return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
|
||||||
|
@ -71,6 +76,7 @@ public class PropertyInferredData implements PropertyData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XClass getClassOrElement() throws MappingException {
|
public XClass getClassOrElement() throws MappingException {
|
||||||
if ( property.isAnnotationPresent( Target.class ) ) {
|
if ( property.isAnnotationPresent( Target.class ) ) {
|
||||||
return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
|
return reflectionManager.toXClass( property.getAnnotation( Target.class ).value() );
|
||||||
|
@ -80,18 +86,22 @@ public class PropertyInferredData implements PropertyData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getClassOrElementName() throws MappingException {
|
public String getClassOrElementName() throws MappingException {
|
||||||
return getClassOrElement().getName();
|
return getClassOrElement().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getTypeName() throws MappingException {
|
public String getTypeName() throws MappingException {
|
||||||
return getPropertyClass().getName();
|
return getPropertyClass().getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XProperty getProperty() {
|
public XProperty getProperty() {
|
||||||
return property;
|
return property;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XClass getDeclaringClass() {
|
public XClass getDeclaringClass() {
|
||||||
return declaringClass;
|
return declaringClass;
|
||||||
}
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations.reflection.internal;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
|
@ -2,12 +2,15 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
|
|
||||||
public class PropertyPreloadedData implements PropertyData {
|
public class PropertyPreloadedData implements PropertyData {
|
||||||
private final AccessType defaultAccess;
|
private final AccessType defaultAccess;
|
||||||
|
@ -22,34 +25,42 @@ public class PropertyPreloadedData implements PropertyData {
|
||||||
this.returnedClass = returnedClass;
|
this.returnedClass = returnedClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public AccessType getDefaultAccess() throws MappingException {
|
public AccessType getDefaultAccess() throws MappingException {
|
||||||
return defaultAccess;
|
return defaultAccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getPropertyName() throws MappingException {
|
public String getPropertyName() throws MappingException {
|
||||||
return propertyName;
|
return propertyName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XClass getClassOrElement() throws MappingException {
|
public XClass getClassOrElement() throws MappingException {
|
||||||
return getPropertyClass();
|
return getPropertyClass();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XClass getPropertyClass() throws MappingException {
|
public XClass getPropertyClass() throws MappingException {
|
||||||
return returnedClass;
|
return returnedClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getClassOrElementName() throws MappingException {
|
public String getClassOrElementName() throws MappingException {
|
||||||
return getTypeName();
|
return getTypeName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getTypeName() throws MappingException {
|
public String getTypeName() throws MappingException {
|
||||||
return returnedClass == null ? null : returnedClass.getName();
|
return returnedClass == null ? null : returnedClass.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XProperty getProperty() {
|
public XProperty getProperty() {
|
||||||
return null; //instead of UnsupportedOperationException
|
return null; //instead of UnsupportedOperationException
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public XClass getDeclaringClass() {
|
public XClass getDeclaringClass() {
|
||||||
//Preloaded properties are artificial wrapper for collection element accesses
|
//Preloaded properties are artificial wrapper for collection element accesses
|
||||||
//and idClass creation, ignore.
|
//and idClass creation, ignore.
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
|
@ -2,11 +2,13 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bind query
|
* Bind query
|
||||||
*
|
*
|
|
@ -2,18 +2,18 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import jakarta.persistence.SqlResultSetMapping;
|
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
|
||||||
import org.hibernate.cfg.QuerySecondPass;
|
|
||||||
import org.hibernate.mapping.PersistentClass;
|
|
||||||
import org.hibernate.boot.query.SqlResultSetMappingDescriptor;
|
import org.hibernate.boot.query.SqlResultSetMappingDescriptor;
|
||||||
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
||||||
|
import jakarta.persistence.SqlResultSetMapping;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
|
@ -1,13 +1,19 @@
|
||||||
package org.hibernate.cfg;
|
/*
|
||||||
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
|
*
|
||||||
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
|
*/
|
||||||
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
||||||
public class SecondaryTableFromAnnotationSecondPass implements SecondPass{
|
public class SecondaryTableFromAnnotationSecondPass implements SecondPass {
|
||||||
private final EntityBinder entityBinder;
|
private final EntityBinder entityBinder;
|
||||||
private final PropertyHolder propertyHolder;
|
private final PropertyHolder propertyHolder;
|
||||||
private final XAnnotatedElement annotatedClass;
|
private final XAnnotatedElement annotatedClass;
|
||||||
|
@ -18,6 +24,7 @@ public class SecondaryTableFromAnnotationSecondPass implements SecondPass{
|
||||||
this.annotatedClass = annotatedClass;
|
this.annotatedClass = annotatedClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
entityBinder.finalSecondaryTableFromAnnotationBinding( propertyHolder );
|
entityBinder.finalSecondaryTableFromAnnotationBinding( propertyHolder );
|
||||||
}
|
}
|
|
@ -2,15 +2,15 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
import org.hibernate.annotations.common.reflection.XAnnotatedElement;
|
||||||
import org.hibernate.cfg.annotations.EntityBinder;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,6 +27,7 @@ public class SecondaryTableSecondPass implements SecondPass {
|
||||||
this.annotatedClass = annotatedClass;
|
this.annotatedClass = annotatedClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
entityBinder.finalSecondaryTableBinding( propertyHolder );
|
entityBinder.finalSecondaryTableBinding( propertyHolder );
|
||||||
}
|
}
|
|
@ -2,14 +2,14 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.cfg.annotations.BasicValueBinder;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -22,6 +22,7 @@ public class SetBasicValueTypeSecondPass implements SecondPass {
|
||||||
binder = val;
|
binder = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
binder.fillSimpleValue();
|
binder.fillSimpleValue();
|
||||||
}
|
}
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
@ -31,6 +31,7 @@ public class SimpleToOneFkSecondPass extends FkSecondPass {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(java.util.Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(java.util.Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
value.createForeignKey();
|
value.createForeignKey();
|
||||||
}
|
}
|
|
@ -2,16 +2,13 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import jakarta.persistence.Index;
|
|
||||||
import jakarta.persistence.UniqueConstraint;
|
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.boot.model.naming.EntityNaming;
|
import org.hibernate.boot.model.naming.EntityNaming;
|
||||||
|
@ -23,13 +20,6 @@ import org.hibernate.boot.model.naming.NamingStrategyHelper;
|
||||||
import org.hibernate.boot.model.source.spi.AttributePath;
|
import org.hibernate.boot.model.source.spi.AttributePath;
|
||||||
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
import org.hibernate.boot.spi.InFlightMetadataCollector;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumn;
|
|
||||||
import org.hibernate.cfg.AnnotatedJoinColumns;
|
|
||||||
import org.hibernate.cfg.IndexOrUniqueKeySecondPass;
|
|
||||||
import org.hibernate.cfg.JPAIndexHolder;
|
|
||||||
import org.hibernate.cfg.ObjectNameSource;
|
|
||||||
import org.hibernate.cfg.PropertyHolder;
|
|
||||||
import org.hibernate.cfg.UniqueConstraintHolder;
|
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
|
@ -49,6 +39,9 @@ import org.hibernate.mapping.Value;
|
||||||
|
|
||||||
import org.jboss.logging.Logger;
|
import org.jboss.logging.Logger;
|
||||||
|
|
||||||
|
import jakarta.persistence.Index;
|
||||||
|
import jakarta.persistence.UniqueConstraint;
|
||||||
|
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.isQuoted;
|
import static org.hibernate.internal.util.StringHelper.isQuoted;
|
||||||
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
|
@ -2,24 +2,13 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import jakarta.persistence.Column;
|
import java.util.ArrayList;
|
||||||
import jakarta.persistence.ConstraintMode;
|
import java.util.List;
|
||||||
import jakarta.persistence.FetchType;
|
|
||||||
import jakarta.persistence.ForeignKey;
|
|
||||||
import jakarta.persistence.Id;
|
|
||||||
import jakarta.persistence.JoinColumn;
|
|
||||||
import jakarta.persistence.JoinColumns;
|
|
||||||
import jakarta.persistence.JoinTable;
|
|
||||||
import jakarta.persistence.ManyToOne;
|
|
||||||
import jakarta.persistence.MapsId;
|
|
||||||
import jakarta.persistence.OneToOne;
|
|
||||||
|
|
||||||
import jakarta.persistence.PrimaryKeyJoinColumn;
|
|
||||||
import jakarta.persistence.PrimaryKeyJoinColumns;
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.FetchMode;
|
import org.hibernate.FetchMode;
|
||||||
|
@ -34,21 +23,33 @@ import org.hibernate.annotations.OnDelete;
|
||||||
import org.hibernate.annotations.OnDeleteAction;
|
import org.hibernate.annotations.OnDeleteAction;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.PropertyBinder;
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.internal.CoreMessageLogger;
|
import org.hibernate.internal.CoreMessageLogger;
|
||||||
import org.hibernate.mapping.Join;
|
import org.hibernate.mapping.Join;
|
||||||
import org.hibernate.mapping.KeyValue;
|
import org.hibernate.mapping.KeyValue;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
import org.hibernate.mapping.ToOne;
|
import org.hibernate.mapping.ToOne;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import jakarta.persistence.Column;
|
||||||
import java.util.List;
|
import jakarta.persistence.ConstraintMode;
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.ForeignKey;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.JoinColumns;
|
||||||
|
import jakarta.persistence.JoinTable;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import jakarta.persistence.MapsId;
|
||||||
|
import jakarta.persistence.OneToOne;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumns;
|
||||||
|
|
||||||
import static org.hibernate.cfg.AnnotationBinder.matchIgnoreNotFoundWithFetchType;
|
import static org.hibernate.boot.model.internal.AnnotationBinder.matchIgnoreNotFoundWithFetchType;
|
||||||
import static org.hibernate.cfg.BinderHelper.getCascadeStrategy;
|
import static org.hibernate.boot.model.internal.BinderHelper.getCascadeStrategy;
|
||||||
import static org.hibernate.cfg.BinderHelper.getFetchMode;
|
import static org.hibernate.boot.model.internal.BinderHelper.getFetchMode;
|
||||||
import static org.hibernate.cfg.BinderHelper.getPath;
|
import static org.hibernate.boot.model.internal.BinderHelper.getPath;
|
||||||
import static org.hibernate.internal.CoreLogging.messageLogger;
|
import static org.hibernate.internal.CoreLogging.messageLogger;
|
||||||
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
|
||||||
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
|
|
@ -2,15 +2,14 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.AnnotationException;
|
import org.hibernate.AnnotationException;
|
||||||
import org.hibernate.AssertionFailure;
|
import org.hibernate.AssertionFailure;
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
import org.hibernate.cfg.annotations.TableBinder;
|
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
import org.hibernate.mapping.KeyValue;
|
import org.hibernate.mapping.KeyValue;
|
||||||
import org.hibernate.mapping.ManyToOne;
|
import org.hibernate.mapping.ManyToOne;
|
||||||
|
@ -19,7 +18,7 @@ import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.Property;
|
import org.hibernate.mapping.Property;
|
||||||
import org.hibernate.mapping.ToOne;
|
import org.hibernate.mapping.ToOne;
|
||||||
|
|
||||||
import static org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference;
|
import static org.hibernate.boot.model.internal.BinderHelper.createSyntheticPropertyReference;
|
||||||
import static org.hibernate.internal.util.StringHelper.qualify;
|
import static org.hibernate.internal.util.StringHelper.qualify;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -93,6 +92,7 @@ public class ToOneFkSecondPass extends FkSecondPass {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(java.util.Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(java.util.Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
if ( value instanceof ManyToOne ) {
|
if ( value instanceof ManyToOne ) {
|
||||||
//TODO: move this validation logic to a separate ManyToOnSecondPass
|
//TODO: move this validation logic to a separate ManyToOnSecondPass
|
|
@ -2,9 +2,9 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -2,15 +2,16 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.FetchProfile;
|
import org.hibernate.annotations.FetchProfile;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingContext;
|
import org.hibernate.boot.spi.MetadataBuildingContext;
|
||||||
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
import org.hibernate.mapping.MetadataSource;
|
import org.hibernate.mapping.MetadataSource;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
||||||
|
@ -31,10 +32,9 @@ public class VerifyFetchProfileReferenceSecondPass implements SecondPass {
|
||||||
this.buildingContext = buildingContext;
|
this.buildingContext = buildingContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
public void doSecondPass(Map<String, PersistentClass> persistentClasses) throws MappingException {
|
||||||
org.hibernate.mapping.FetchProfile profile = buildingContext.getMetadataCollector().getFetchProfile(
|
org.hibernate.mapping.FetchProfile profile = buildingContext.getMetadataCollector().getFetchProfile( fetchProfileName );
|
||||||
fetchProfileName
|
|
||||||
);
|
|
||||||
if ( profile != null ) {
|
if ( profile != null ) {
|
||||||
if ( profile.getSource() != MetadataSource.ANNOTATIONS ) {
|
if ( profile.getSource() != MetadataSource.ANNOTATIONS ) {
|
||||||
return;
|
return;
|
||||||
|
@ -50,7 +50,9 @@ public class VerifyFetchProfileReferenceSecondPass implements SecondPass {
|
||||||
clazz.getProperty( fetch.association() );
|
clazz.getProperty( fetch.association() );
|
||||||
|
|
||||||
profile.addFetch(
|
profile.addFetch(
|
||||||
fetch.entity().getName(), fetch.association(), fetch.mode().toString().toLowerCase(Locale.ROOT)
|
fetch.entity().getName(),
|
||||||
|
fetch.association(),
|
||||||
|
fetch.mode().toString().toLowerCase(Locale.ROOT)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,12 +2,15 @@
|
||||||
* Hibernate, Relational Persistence for Idiomatic Java
|
* Hibernate, Relational Persistence for Idiomatic Java
|
||||||
*
|
*
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import org.hibernate.MappingException;
|
import org.hibernate.MappingException;
|
||||||
import org.hibernate.annotations.common.reflection.XClass;
|
import org.hibernate.annotations.common.reflection.XClass;
|
||||||
import org.hibernate.annotations.common.reflection.XProperty;
|
import org.hibernate.annotations.common.reflection.XProperty;
|
||||||
|
import org.hibernate.boot.spi.AccessType;
|
||||||
|
import org.hibernate.boot.spi.PropertyData;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -17,40 +20,48 @@ public class WrappedInferredData implements PropertyData {
|
||||||
private final PropertyData wrappedInferredData;
|
private final PropertyData wrappedInferredData;
|
||||||
private final String propertyName;
|
private final String propertyName;
|
||||||
|
|
||||||
public XClass getClassOrElement() throws MappingException {
|
|
||||||
return wrappedInferredData.getClassOrElement();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getClassOrElementName() throws MappingException {
|
|
||||||
return wrappedInferredData.getClassOrElementName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public AccessType getDefaultAccess() {
|
|
||||||
return wrappedInferredData.getDefaultAccess();
|
|
||||||
}
|
|
||||||
|
|
||||||
public XProperty getProperty() {
|
|
||||||
return wrappedInferredData.getProperty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public XClass getDeclaringClass() {
|
|
||||||
return wrappedInferredData.getDeclaringClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public XClass getPropertyClass() throws MappingException {
|
|
||||||
return wrappedInferredData.getPropertyClass();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPropertyName() throws MappingException {
|
|
||||||
return propertyName;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTypeName() throws MappingException {
|
|
||||||
return wrappedInferredData.getTypeName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public WrappedInferredData(PropertyData inferredData, String suffix) {
|
public WrappedInferredData(PropertyData inferredData, String suffix) {
|
||||||
this.wrappedInferredData = inferredData;
|
this.wrappedInferredData = inferredData;
|
||||||
this.propertyName = StringHelper.qualify( inferredData.getPropertyName(), suffix );
|
this.propertyName = StringHelper.qualify( inferredData.getPropertyName(), suffix );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public XClass getClassOrElement() throws MappingException {
|
||||||
|
return wrappedInferredData.getClassOrElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getClassOrElementName() throws MappingException {
|
||||||
|
return wrappedInferredData.getClassOrElementName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public AccessType getDefaultAccess() {
|
||||||
|
return wrappedInferredData.getDefaultAccess();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public XProperty getProperty() {
|
||||||
|
return wrappedInferredData.getProperty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public XClass getDeclaringClass() {
|
||||||
|
return wrappedInferredData.getDeclaringClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public XClass getPropertyClass() throws MappingException {
|
||||||
|
return wrappedInferredData.getPropertyClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPropertyName() throws MappingException {
|
||||||
|
return propertyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTypeName() throws MappingException {
|
||||||
|
return wrappedInferredData.getTypeName();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
|
||||||
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.cfg.annotations.reflection.internal;
|
package org.hibernate.boot.model.internal;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -326,8 +326,9 @@ public class XMLContext implements Serializable {
|
||||||
if ( globalDefault.getMetadataComplete() != null ) {
|
if ( globalDefault.getMetadataComplete() != null ) {
|
||||||
metadataComplete = globalDefault.getMetadataComplete();
|
metadataComplete = globalDefault.getMetadataComplete();
|
||||||
}
|
}
|
||||||
//TODO fix that in stone if cascade-persist is set already?
|
if ( globalDefault.getCascadePersist() != null ) {
|
||||||
if ( globalDefault.getCascadePersist() != null ) cascadePersist = globalDefault.getCascadePersist();
|
cascadePersist = globalDefault.getCascadePersist();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,11 +7,16 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Package defining Hibernate's boot-time metamodel, which is an
|
* Package defining Hibernate's boot-time metamodel, which is an
|
||||||
* incrementally built understanding of the application's domain
|
* understanding of the application's domain model (its entities,
|
||||||
* model (its entities, attributes, etc).
|
* attributes, etc.) and the mapping of those "domain model parts"
|
||||||
|
* to the database.
|
||||||
|
* <p/>
|
||||||
|
* It is {@linkplain org.hibernate.boot.model.process incrementally built}
|
||||||
|
* from {@linkplain org.hibernate.annotations annotations} and XML mappings
|
||||||
*
|
*
|
||||||
* Ultimately, as part of the process of creating the
|
* @implNote Ultimately, as part of the process of creating the
|
||||||
* {@link org.hibernate.SessionFactory}, Hibernate will interpret
|
* {@link org.hibernate.SessionFactory}, Hibernate will interpret
|
||||||
* this boot metamodel to its runtime metamodel.
|
* this boot metamodel to its runtime
|
||||||
|
* {@linkplain org.hibernate.metamodel.mapping mapping metamodel}
|
||||||
*/
|
*/
|
||||||
package org.hibernate.boot.model;
|
package org.hibernate.boot.model;
|
||||||
|
|
|
@ -6,8 +6,11 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines the contracts used to perform the process of transforming a {@link org.hibernate.boot.MetadataSources}
|
* Defines the contracts used to perform the process of transforming
|
||||||
* references into a {@link org.hibernate.boot.Metadata} reference. This process is mainly defined by
|
* {@linkplain org.hibernate.boot.MetadataSources mapping sources} into
|
||||||
|
* the {@link org.hibernate.boot.Metadata} reference.
|
||||||
|
*
|
||||||
|
* @implNote This process is defined by
|
||||||
* {@link org.hibernate.boot.model.process.spi.MetadataBuildingProcess}.
|
* {@link org.hibernate.boot.model.process.spi.MetadataBuildingProcess}.
|
||||||
*/
|
*/
|
||||||
package org.hibernate.boot.model.process;
|
package org.hibernate.boot.model.process;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.boot.model.source.internal;
|
package org.hibernate.boot.model.source.internal;
|
||||||
|
|
||||||
import org.hibernate.cfg.SecondPass;
|
import org.hibernate.boot.spi.SecondPass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Because {@link org.hibernate.boot.model.naming.ImplicitNamingStrategy} often requires
|
* Because {@link org.hibernate.boot.model.naming.ImplicitNamingStrategy} often requires
|
||||||
|
|
|
@ -20,15 +20,15 @@ import org.hibernate.boot.internal.MetadataBuildingContextRootImpl;
|
||||||
import org.hibernate.boot.jaxb.mapping.JaxbEntityMappings;
|
import org.hibernate.boot.jaxb.mapping.JaxbEntityMappings;
|
||||||
import org.hibernate.boot.jaxb.spi.Binding;
|
import org.hibernate.boot.jaxb.spi.Binding;
|
||||||
import org.hibernate.boot.model.convert.spi.ConverterRegistry;
|
import org.hibernate.boot.model.convert.spi.ConverterRegistry;
|
||||||
|
import org.hibernate.boot.model.internal.AnnotationBinder;
|
||||||
|
import org.hibernate.boot.model.internal.InheritanceState;
|
||||||
|
import org.hibernate.boot.model.internal.JPAXMLOverriddenMetadataProvider;
|
||||||
import org.hibernate.boot.model.process.spi.ManagedResources;
|
import org.hibernate.boot.model.process.spi.ManagedResources;
|
||||||
import org.hibernate.boot.model.source.spi.MetadataSourceProcessor;
|
import org.hibernate.boot.model.source.spi.MetadataSourceProcessor;
|
||||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||||
import org.hibernate.boot.spi.JpaOrmXmlPersistenceUnitDefaultAware;
|
import org.hibernate.boot.spi.JpaOrmXmlPersistenceUnitDefaultAware;
|
||||||
import org.hibernate.boot.spi.JpaOrmXmlPersistenceUnitDefaultAware.JpaOrmXmlPersistenceUnitDefaults;
|
import org.hibernate.boot.spi.JpaOrmXmlPersistenceUnitDefaultAware.JpaOrmXmlPersistenceUnitDefaults;
|
||||||
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
import org.hibernate.boot.spi.MetadataBuildingOptions;
|
||||||
import org.hibernate.cfg.AnnotationBinder;
|
|
||||||
import org.hibernate.cfg.InheritanceState;
|
|
||||||
import org.hibernate.cfg.annotations.reflection.internal.JPAXMLOverriddenMetadataProvider;
|
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue