resolve test failres after merge
This commit is contained in:
parent
3dc371c91a
commit
59a2ccd79f
|
@ -24,6 +24,7 @@
|
|||
|
||||
apply plugin: 'groovy'
|
||||
apply plugin: 'idea'
|
||||
apply from: '../libraries.gradle'
|
||||
|
||||
buildDir = "target"
|
||||
|
||||
|
@ -40,9 +41,10 @@ dependencies {
|
|||
compile gradleApi()
|
||||
compile localGroovy()
|
||||
groovy localGroovy()
|
||||
compile 'org.apache.ant:ant:1.8.2'
|
||||
compile(libraries.ant)
|
||||
// injection plugin
|
||||
compile 'org.javassist:javassist:3.15.0-GA'
|
||||
compile(libraries.javassist)
|
||||
compile(libraries.jandex)
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ import java.util.Set;
|
|||
|
||||
import org.hibernate.cfg.Configuration;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.metamodel.spi.MetadataImplementor;
|
||||
import org.hibernate.service.spi.SessionFactoryServiceRegistry;
|
||||
|
||||
/**
|
||||
|
@ -54,6 +55,13 @@ public interface ActivationContext {
|
|||
*/
|
||||
public Configuration getConfiguration();
|
||||
|
||||
/**
|
||||
* Access the Metadata
|
||||
*
|
||||
* @return The Hibernate Metadata object
|
||||
*/
|
||||
public MetadataImplementor getMetadata();
|
||||
|
||||
/**
|
||||
* Access the SessionFactory being built to trigger this BV activation
|
||||
*
|
||||
|
|
|
@ -82,10 +82,9 @@ public class BeanValidationEventListener
|
|||
init( factory, properties );
|
||||
}
|
||||
|
||||
public void initialize(Configuration cfg) {
|
||||
public void initialize(Properties props) {
|
||||
if ( !initialized ) {
|
||||
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
|
||||
Properties props = cfg.getProperties();
|
||||
init( factory, props );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -138,6 +138,11 @@ public class BeanValidationIntegrator implements Integrator {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MetadataImplementor getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SessionFactoryImplementor getSessionFactory() {
|
||||
return sessionFactory;
|
||||
|
@ -218,6 +223,11 @@ public class BeanValidationIntegrator implements Integrator {
|
|||
public SessionFactoryServiceRegistry getServiceRegistry() {
|
||||
return serviceRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MetadataImplementor getMetadata() {
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
|
|
|
@ -46,7 +46,9 @@ import javax.validation.metadata.PropertyDescriptor;
|
|||
import org.jboss.logging.Logger;
|
||||
|
||||
import org.hibernate.AssertionFailure;
|
||||
import org.hibernate.EntityMode;
|
||||
import org.hibernate.MappingException;
|
||||
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
|
||||
import org.hibernate.cfg.Environment;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||
|
@ -61,6 +63,15 @@ import org.hibernate.mapping.Component;
|
|||
import org.hibernate.mapping.PersistentClass;
|
||||
import org.hibernate.mapping.Property;
|
||||
import org.hibernate.mapping.SingleTableSubclass;
|
||||
import org.hibernate.metamodel.spi.binding.AttributeBinding;
|
||||
import org.hibernate.metamodel.spi.binding.BasicAttributeBinding;
|
||||
import org.hibernate.metamodel.spi.binding.CompositeAttributeBinding;
|
||||
import org.hibernate.metamodel.spi.binding.EntityBinding;
|
||||
import org.hibernate.metamodel.spi.binding.EntityIdentifier;
|
||||
import org.hibernate.metamodel.spi.binding.InheritanceType;
|
||||
import org.hibernate.metamodel.spi.binding.RelationalValueBinding;
|
||||
import org.hibernate.metamodel.spi.binding.SingularAttributeBinding;
|
||||
import org.hibernate.metamodel.spi.relational.Value;
|
||||
|
||||
/**
|
||||
* @author Emmanuel Bernard
|
||||
|
@ -90,7 +101,7 @@ class TypeSafeActivator {
|
|||
|
||||
@SuppressWarnings("UnusedDeclaration")
|
||||
public static void activate(ActivationContext activationContext) {
|
||||
final Properties properties = activationContext.getConfiguration().getProperties();
|
||||
final Properties properties = activationContext.getSessionFactory().getProperties();
|
||||
final ValidatorFactory factory;
|
||||
try {
|
||||
factory = getValidatorFactory( properties );
|
||||
|
@ -121,13 +132,13 @@ class TypeSafeActivator {
|
|||
|
||||
// de-activate not-null tracking at the core level when Bean Validation is present unless the user explicitly
|
||||
// asks for it
|
||||
if ( activationContext.getConfiguration().getProperty( Environment.CHECK_NULLABILITY ) == null ) {
|
||||
if ( activationContext.getSessionFactory().getProperties().getProperty( Environment.CHECK_NULLABILITY ) == null ) {
|
||||
activationContext.getSessionFactory().getSettings().setCheckNullability( false );
|
||||
}
|
||||
|
||||
final BeanValidationEventListener listener = new BeanValidationEventListener(
|
||||
validatorFactory,
|
||||
activationContext.getConfiguration().getProperties()
|
||||
activationContext.getSessionFactory().getProperties()
|
||||
);
|
||||
|
||||
final EventListenerRegistry listenerRegistry = activationContext.getServiceRegistry()
|
||||
|
@ -139,12 +150,12 @@ class TypeSafeActivator {
|
|||
listenerRegistry.appendListeners( EventType.PRE_UPDATE, listener );
|
||||
listenerRegistry.appendListeners( EventType.PRE_DELETE, listener );
|
||||
|
||||
listener.initialize( activationContext.getConfiguration() );
|
||||
listener.initialize( activationContext.getSessionFactory().getProperties() );
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "UnusedParameters"})
|
||||
private static void applyRelationalConstraints(ValidatorFactory factory, ActivationContext activationContext) {
|
||||
final Properties properties = activationContext.getConfiguration().getProperties();
|
||||
final Properties properties = activationContext.getSessionFactory().getProperties();
|
||||
if ( ! ConfigurationHelper.getBoolean( BeanValidationIntegrator.APPLY_CONSTRAINTS, properties, true ) ){
|
||||
LOG.debug( "Skipping application of relational constraints from legacy Hibernate Validator" );
|
||||
return;
|
||||
|
@ -154,41 +165,100 @@ class TypeSafeActivator {
|
|||
if ( ! ( modes.contains( ValidationMode.DDL ) || modes.contains( ValidationMode.AUTO ) ) ) {
|
||||
return;
|
||||
}
|
||||
applyRelationalConstraints( activationContext );
|
||||
|
||||
applyRelationalConstraints(
|
||||
activationContext.getConfiguration().createMappings().getClasses().values(),
|
||||
properties,
|
||||
activationContext.getServiceRegistry().getService( JdbcServices.class ).getDialect()
|
||||
);
|
||||
}
|
||||
|
||||
@SuppressWarnings( {"UnusedDeclaration"})
|
||||
public static void applyRelationalConstraints(Collection<PersistentClass> persistentClasses, Properties properties, Dialect dialect) {
|
||||
public static void applyRelationalConstraints(final ActivationContext activationContext) {
|
||||
final Properties properties = activationContext.getSessionFactory().getProperties();
|
||||
final Dialect dialect = activationContext.getServiceRegistry().getService( JdbcServices.class ).getDialect();
|
||||
final ClassLoaderService classLoaderService = activationContext.getServiceRegistry().getService( ClassLoaderService.class );
|
||||
ValidatorFactory factory = getValidatorFactory( properties );
|
||||
Class<?>[] groupsArray = new GroupsPerOperation( properties ).get( GroupsPerOperation.Operation.DDL );
|
||||
Set<Class<?>> groups = new HashSet<Class<?>>( Arrays.asList( groupsArray ) );
|
||||
|
||||
if ( activationContext.getConfiguration() != null ) {
|
||||
Collection<PersistentClass> persistentClasses = activationContext.getConfiguration().createMappings().getClasses().values();
|
||||
for ( PersistentClass persistentClass : persistentClasses ) {
|
||||
final String className = persistentClass.getClassName();
|
||||
|
||||
if ( className == null || className.length() == 0 ) {
|
||||
if ( StringHelper.isEmpty( className ) ) {
|
||||
continue;
|
||||
}
|
||||
Class<?> clazz;
|
||||
try {
|
||||
clazz = ReflectHelper.classForName( className, TypeSafeActivator.class );
|
||||
}
|
||||
catch ( ClassNotFoundException e ) {
|
||||
throw new AssertionFailure( "Entity class not found", e );
|
||||
}
|
||||
Class<?> clazz = classLoaderService.classForName( className );
|
||||
|
||||
try {
|
||||
applyDDL( "", persistentClass, clazz, factory, groups, true, dialect );
|
||||
}
|
||||
catch (Exception e) {
|
||||
catch ( Exception e ) {
|
||||
LOG.unableToApplyConstraints( className, e );
|
||||
}
|
||||
}
|
||||
} else if (activationContext.getMetadata()!=null){
|
||||
for ( final EntityBinding entityBinding : activationContext.getMetadata().getEntityBindings() ) {
|
||||
if ( entityBinding.getHierarchyDetails().getEntityMode() != EntityMode.POJO ) {
|
||||
continue;
|
||||
}
|
||||
final String className = entityBinding.getEntity().getClassName();
|
||||
|
||||
if ( StringHelper.isEmpty( className ) ) {
|
||||
continue;
|
||||
}
|
||||
Class<?> clazz = classLoaderService.classForName( className );
|
||||
|
||||
try {
|
||||
applyDDL( "", entityBinding, clazz, factory, groups, true, dialect );
|
||||
}
|
||||
catch ( Exception e ) {
|
||||
LOG.unableToApplyConstraints( className, e );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void applyDDL(
|
||||
String prefix,
|
||||
EntityBinding entityBinding,
|
||||
Class<?> clazz,
|
||||
ValidatorFactory factory,
|
||||
Set<Class<?>> groups,
|
||||
boolean activateNotNull,
|
||||
Dialect dialect) {
|
||||
final BeanDescriptor descriptor = factory.getValidator().getConstraintsForClass( clazz );
|
||||
//no bean level constraints can be applied, go to the properties
|
||||
|
||||
for ( PropertyDescriptor propertyDesc : descriptor.getConstrainedProperties() ) {
|
||||
AttributeBinding attributeBinding = findAttributeBindingByName(
|
||||
entityBinding,
|
||||
prefix + propertyDesc.getPropertyName()
|
||||
);
|
||||
boolean hasNotNull;
|
||||
if ( attributeBinding != null ) {
|
||||
hasNotNull = applyConstraints(
|
||||
propertyDesc.getConstraintDescriptors(), attributeBinding, propertyDesc, groups, activateNotNull, dialect
|
||||
);
|
||||
if ( (attributeBinding instanceof CompositeAttributeBinding) && propertyDesc.isCascaded() ) {
|
||||
Class<?> componentClass = ( (CompositeAttributeBinding) attributeBinding ).getClassReference();
|
||||
|
||||
/*
|
||||
* we can apply not null if the upper component let's us activate not null
|
||||
* and if the property is not null.
|
||||
* Otherwise, all sub columns should be left nullable
|
||||
*/
|
||||
final boolean canSetNotNullOnColumns = activateNotNull && hasNotNull;
|
||||
applyDDL(
|
||||
prefix + propertyDesc.getPropertyName() + ".",
|
||||
entityBinding, componentClass, factory, groups,
|
||||
canSetNotNullOnColumns,
|
||||
dialect
|
||||
);
|
||||
}
|
||||
//FIXME add collection of components
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void applyDDL(
|
||||
|
@ -229,7 +299,44 @@ class TypeSafeActivator {
|
|||
}
|
||||
}
|
||||
}
|
||||
private static boolean applyConstraints(
|
||||
Set<ConstraintDescriptor<?>> constraintDescriptors,
|
||||
AttributeBinding attributeBinding,
|
||||
PropertyDescriptor propertyDesc,
|
||||
Set<Class<?>> groups,
|
||||
boolean canApplyNotNull,
|
||||
Dialect dialect) {
|
||||
boolean hasNotNull = false;
|
||||
for ( ConstraintDescriptor<?> descriptor : constraintDescriptors ) {
|
||||
if ( groups != null && Collections.disjoint( descriptor.getGroups(), groups ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( canApplyNotNull ) {
|
||||
hasNotNull = hasNotNull || applyNotNull( attributeBinding, descriptor );
|
||||
}
|
||||
|
||||
// apply bean validation specific constraints
|
||||
applyDigits( attributeBinding, descriptor );
|
||||
applySize( attributeBinding, descriptor, propertyDesc );
|
||||
applyMin( attributeBinding, descriptor, dialect );
|
||||
applyMax( attributeBinding, descriptor, dialect );
|
||||
|
||||
// apply hibernate validator specific constraints - we cannot import any HV specific classes though!
|
||||
// no need to check explicitly for @Range. @Range is a composed constraint using @Min and @Max which
|
||||
// will be taken care later
|
||||
applyLength( attributeBinding, descriptor, propertyDesc );
|
||||
|
||||
// pass an empty set as composing constraints inherit the main constraint and thus are matching already
|
||||
hasNotNull = hasNotNull || applyConstraints(
|
||||
descriptor.getComposingConstraints(),
|
||||
attributeBinding, propertyDesc, null,
|
||||
canApplyNotNull,
|
||||
dialect
|
||||
);
|
||||
}
|
||||
return hasNotNull;
|
||||
}
|
||||
private static boolean applyConstraints(
|
||||
Set<ConstraintDescriptor<?>> constraintDescriptors,
|
||||
Property property,
|
||||
|
@ -268,7 +375,33 @@ class TypeSafeActivator {
|
|||
}
|
||||
return hasNotNull;
|
||||
}
|
||||
private static void applyMin(AttributeBinding property, ConstraintDescriptor<?> descriptor, Dialect dialect) {
|
||||
if ( Min.class.equals( descriptor.getAnnotation().annotationType() ) ) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ConstraintDescriptor<Min> minConstraint = (ConstraintDescriptor<Min>) descriptor;
|
||||
long min = minConstraint.getAnnotation().value();
|
||||
|
||||
org.hibernate.metamodel.spi.relational.Column col = getSingleColumn( property );
|
||||
if( col == null ) {
|
||||
return;
|
||||
}
|
||||
String checkConstraint = col.getColumnName().getText(dialect) + ">=" + min;
|
||||
applySQLCheck( col, checkConstraint );
|
||||
}
|
||||
}
|
||||
|
||||
private static void applyMax(AttributeBinding property, ConstraintDescriptor<?> descriptor, Dialect dialect) {
|
||||
if ( Max.class.equals( descriptor.getAnnotation().annotationType() ) ) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ConstraintDescriptor<Max> maxConstraint = (ConstraintDescriptor<Max>) descriptor;
|
||||
long max = maxConstraint.getAnnotation().value();
|
||||
org.hibernate.metamodel.spi.relational.Column col = getSingleColumn( property );
|
||||
if( col == null ) {
|
||||
return;
|
||||
} String checkConstraint = col.getColumnName().getText(dialect) + "<=" + max;
|
||||
applySQLCheck( col, checkConstraint );
|
||||
}
|
||||
}
|
||||
private static void applyMin(Property property, ConstraintDescriptor<?> descriptor, Dialect dialect) {
|
||||
if ( Min.class.equals( descriptor.getAnnotation().annotationType() ) ) {
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@ -291,7 +424,15 @@ class TypeSafeActivator {
|
|||
applySQLCheck( col, checkConstraint );
|
||||
}
|
||||
}
|
||||
|
||||
private static void applySQLCheck(org.hibernate.metamodel.spi.relational.Column col, String checkConstraint) {
|
||||
String existingCheck = col.getCheckCondition();
|
||||
// need to check whether the new check is already part of the existing check, because applyDDL can be called
|
||||
// multiple times
|
||||
if ( StringHelper.isNotEmpty( existingCheck ) && !existingCheck.contains( checkConstraint ) ) {
|
||||
checkConstraint = col.getCheckCondition() + " AND " + checkConstraint;
|
||||
}
|
||||
col.setCheckCondition( checkConstraint );
|
||||
}
|
||||
private static void applySQLCheck(Column col, String checkConstraint) {
|
||||
String existingCheck = col.getCheckConstraint();
|
||||
// need to check whether the new check is already part of the existing check, because applyDDL can be called
|
||||
|
@ -302,6 +443,42 @@ class TypeSafeActivator {
|
|||
col.setCheckConstraint( checkConstraint );
|
||||
}
|
||||
|
||||
private static boolean applyNotNull(AttributeBinding property, ConstraintDescriptor<?> descriptor) {
|
||||
boolean hasNotNull = false;
|
||||
if ( NotNull.class.equals( descriptor.getAnnotation().annotationType() ) ) {
|
||||
|
||||
EntityBinding entityBinding = property.getContainer().seekEntityBinding();
|
||||
InheritanceType inheritanceType = entityBinding.getHierarchyDetails().getInheritanceType();
|
||||
|
||||
// properties of a single table inheritance configuration should not be forced to null
|
||||
if(InheritanceType.SINGLE_TABLE.equals( inheritanceType )) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if ( property instanceof CompositeAttributeBinding ) {
|
||||
Iterator<AttributeBinding> iter
|
||||
= ( ( CompositeAttributeBinding ) property)
|
||||
.attributeBindings().iterator();
|
||||
while( iter.hasNext() ) {
|
||||
applyNullConstraint( iter.next() );
|
||||
}
|
||||
} else {
|
||||
applyNullConstraint( property );
|
||||
}
|
||||
hasNotNull = true;
|
||||
}
|
||||
return hasNotNull;
|
||||
}
|
||||
|
||||
private static void applyNullConstraint(AttributeBinding attributeBinding) {
|
||||
org.hibernate.metamodel.spi.relational.Column column
|
||||
= getSingleColumn( attributeBinding );
|
||||
if ( column != null ) {
|
||||
// TODO check with components as in the old configuration approach. see above (HF)
|
||||
column.setNullable( false );
|
||||
}
|
||||
}
|
||||
private static boolean applyNotNull(Property property, ConstraintDescriptor<?> descriptor) {
|
||||
boolean hasNotNull = false;
|
||||
if ( NotNull.class.equals( descriptor.getAnnotation().annotationType() ) ) {
|
||||
|
@ -320,7 +497,18 @@ class TypeSafeActivator {
|
|||
}
|
||||
return hasNotNull;
|
||||
}
|
||||
|
||||
private static void applyDigits(AttributeBinding property, ConstraintDescriptor<?> descriptor) {
|
||||
if ( Digits.class.equals( descriptor.getAnnotation().annotationType() ) ) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ConstraintDescriptor<Digits> digitsConstraint = (ConstraintDescriptor<Digits>) descriptor;
|
||||
int integerDigits = digitsConstraint.getAnnotation().integer();
|
||||
int fractionalDigits = digitsConstraint.getAnnotation().fraction();
|
||||
org.hibernate.metamodel.spi.relational.Column col = getSingleColumn( property );
|
||||
if(col==null)return;
|
||||
col.getSize().setPrecision( integerDigits + fractionalDigits );
|
||||
col.getSize().setScale( fractionalDigits );
|
||||
}
|
||||
}
|
||||
private static void applyDigits(Property property, ConstraintDescriptor<?> descriptor) {
|
||||
if ( Digits.class.equals( descriptor.getAnnotation().annotationType() ) ) {
|
||||
@SuppressWarnings("unchecked")
|
||||
|
@ -333,6 +521,37 @@ class TypeSafeActivator {
|
|||
}
|
||||
}
|
||||
|
||||
private static org.hibernate.metamodel.spi.relational.Column getSingleColumn(AttributeBinding attributeBinding) {
|
||||
if ( !( attributeBinding.getAttribute().isSingular() ) ) {
|
||||
// TODO verify that's correct (HF)
|
||||
return null;
|
||||
}
|
||||
|
||||
SingularAttributeBinding basicAttributeBinding = ( SingularAttributeBinding ) attributeBinding;
|
||||
RelationalValueBinding valueBinding = basicAttributeBinding.getRelationalValueBindings().get( 0 );
|
||||
Value value = valueBinding.getValue();
|
||||
|
||||
if ( valueBinding.isDerived() ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return ( org.hibernate.metamodel.spi.relational.Column ) value;
|
||||
}
|
||||
private static void applySize(AttributeBinding property, ConstraintDescriptor<?> descriptor, PropertyDescriptor propertyDescriptor) {
|
||||
if ( Size.class.equals( descriptor.getAnnotation().annotationType() )
|
||||
&& String.class.equals( propertyDescriptor.getElementClass() ) ) {
|
||||
@SuppressWarnings("unchecked")
|
||||
ConstraintDescriptor<Size> sizeConstraint = (ConstraintDescriptor<Size>) descriptor;
|
||||
int max = sizeConstraint.getAnnotation().max();
|
||||
org.hibernate.metamodel.spi.relational.Column col = getSingleColumn( property );
|
||||
if ( col == null ) {
|
||||
return;
|
||||
}
|
||||
if ( max < Integer.MAX_VALUE ) {
|
||||
col.getSize().setLength( max );
|
||||
}
|
||||
}
|
||||
}
|
||||
private static void applySize(Property property, ConstraintDescriptor<?> descriptor, PropertyDescriptor propertyDescriptor) {
|
||||
if ( Size.class.equals( descriptor.getAnnotation().annotationType() )
|
||||
&& String.class.equals( propertyDescriptor.getElementClass() ) ) {
|
||||
|
@ -345,7 +564,22 @@ class TypeSafeActivator {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void applyLength(AttributeBinding property, ConstraintDescriptor<?> descriptor, PropertyDescriptor propertyDescriptor) {
|
||||
if ( "org.hibernate.validator.constraints.Length".equals(
|
||||
descriptor.getAnnotation().annotationType().getName()
|
||||
)
|
||||
&& String.class.equals( propertyDescriptor.getElementClass() ) ) {
|
||||
@SuppressWarnings("unchecked")
|
||||
int max = (Integer) descriptor.getAttributes().get( "max" );
|
||||
org.hibernate.metamodel.spi.relational.Column col = getSingleColumn( property );
|
||||
if( col == null ){
|
||||
return;
|
||||
}
|
||||
if ( max < Integer.MAX_VALUE ) {
|
||||
col.getSize().setLength( max );
|
||||
}
|
||||
}
|
||||
}
|
||||
private static void applyLength(Property property, ConstraintDescriptor<?> descriptor, PropertyDescriptor propertyDescriptor) {
|
||||
if ( "org.hibernate.validator.constraints.Length".equals(
|
||||
descriptor.getAnnotation().annotationType().getName()
|
||||
|
@ -360,6 +594,46 @@ class TypeSafeActivator {
|
|||
}
|
||||
}
|
||||
|
||||
private static AttributeBinding findAttributeBindingByName(EntityBinding entityBinding,
|
||||
String attrName) {
|
||||
AttributeBinding attrBinding = null;
|
||||
EntityIdentifier identifier = entityBinding.getHierarchyDetails().getEntityIdentifier();
|
||||
BasicAttributeBinding idAttrBinding = null; //identifier.getValueBinding();
|
||||
String idAttrName = idAttrBinding != null ? idAttrBinding.getAttribute().getName() : null;
|
||||
try {
|
||||
if ( attrName == null || attrName.length() == 0 || attrName.equals( idAttrName ) ) {
|
||||
attrBinding = idAttrBinding; // default to id
|
||||
}
|
||||
else {
|
||||
if ( attrName.indexOf( idAttrName + "." ) == 0 ) {
|
||||
attrBinding = idAttrBinding;
|
||||
attrName = attrName.substring( idAttrName.length() + 1 );
|
||||
}
|
||||
for ( StringTokenizer st = new StringTokenizer( attrName, "." ); st.hasMoreElements(); ) {
|
||||
String element = st.nextToken();
|
||||
if ( attrBinding == null ) {
|
||||
attrBinding = entityBinding.locateAttributeBinding( element );
|
||||
}
|
||||
else {
|
||||
return null; // TODO: if (attrBinding.isComposite()) ...
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch ( MappingException error ) {
|
||||
try {
|
||||
//if we do not find it try to check the identifier mapper
|
||||
if ( !identifier.isIdentifierMapper() ) {
|
||||
return null;
|
||||
}
|
||||
// TODO: finish once composite/embedded/component IDs get worked out
|
||||
}
|
||||
catch ( MappingException ee ) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return attrBinding;
|
||||
}
|
||||
/**
|
||||
* @param associatedClass
|
||||
* @param propertyName
|
||||
|
|
|
@ -49,13 +49,13 @@ import org.hibernate.LockMode;
|
|||
import org.hibernate.cache.CacheException;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;
|
||||
import org.hibernate.engine.jndi.JndiException;
|
||||
import org.hibernate.engine.jndi.JndiNameException;
|
||||
import org.hibernate.engine.loading.internal.CollectionLoadContext;
|
||||
import org.hibernate.engine.loading.internal.EntityLoadContext;
|
||||
import org.hibernate.engine.spi.CollectionKey;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.id.IntegralDataTypeHolder;
|
||||
import org.hibernate.engine.jndi.JndiException;
|
||||
import org.hibernate.engine.jndi.JndiNameException;
|
||||
import org.hibernate.type.BasicType;
|
||||
import org.hibernate.type.SerializationException;
|
||||
import org.hibernate.type.Type;
|
||||
|
@ -1576,62 +1576,20 @@ public interface CoreMessageLogger extends BasicLogger {
|
|||
@Message(value = "NaturalId queries executed to database: %s", id = 442)
|
||||
void naturalIdQueriesExecuted(long naturalIdQueriesExecutionCount);
|
||||
|
||||
@Message(value = "Unable to find mapping information for %s. Are you sure all annotated classes and configuration files are added?", id = 443)
|
||||
String missingEntitySource(String entityName);
|
||||
|
||||
@Message(value = "@JoinTable annotation without an association. Check %s#%s", id = 444)
|
||||
String joinTableForNonAssociationAttribute(String entityName, String propertyName);
|
||||
|
||||
@Message(value = "@CollectionTable annotation without a @ElementCollection. Check %s#%s", id = 445)
|
||||
String collectionTableWithoutElementCollection(String entityName, String propertyName);
|
||||
|
||||
@Message(value = "@CollectionTable and @JoinTable specified on the same attribute. Check %s#%s", id = 446)
|
||||
String collectionTableAndJoinTableUsedTogether(String entityName, String propertyName);
|
||||
|
||||
@LogMessage(level = WARN)
|
||||
@Message(
|
||||
value = "Dialect [%s] limits the number of elements in an IN predicate to %s entries. " +
|
||||
"However, the given parameter list [%s] contained %s entries, which will likely cause failures " +
|
||||
"to execute the query in the database",
|
||||
id = 447
|
||||
id = 443
|
||||
)
|
||||
void tooManyInExpressions(String dialectName, int limit, String paramName, int size);
|
||||
|
||||
@LogMessage( level = ERROR )
|
||||
@Message( value = "Illegal argument on static metamodel field injection : %s#%s; expected type : %s; encountered type : %s", id = 448 )
|
||||
void illegalArgumentOnStaticMetamodelFieldInjection( String metamodelClassName,
|
||||
String attributeName,
|
||||
String attributeJavaType,
|
||||
String metamodelFieldJavaType );
|
||||
|
||||
@LogMessage( level = ERROR )
|
||||
@Message( value = "Unable to locate static metamodel field : %s#%s", id = 449 )
|
||||
void unableToLocateStaticMetamodelField( String metamodelClassName,
|
||||
String attributeName );
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.FIELD. To override the access for an attribute " +
|
||||
"@Access has to be placed on the property (getter)", id = 450)
|
||||
String accessTypeOverrideShouldBeAnnotatedOnProperty( String className );
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.FIELD. To override the access for an attribute " +
|
||||
"@Access has to be placed on the property (getter) with an access type of AccessType.PROPERTY. " +
|
||||
"Using AccessType.FIELD on the property has no effect", id = 451)
|
||||
String accessTypeOverrideShouldBeProperty( String className );
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.PROPERTY. To override the access for a field " +
|
||||
"@Access has to be placed on the field ", id = 452)
|
||||
String accessTypeOverrideShouldBeAnnotatedOnField( String className );
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.PROPERTY. To override the access for a field " +
|
||||
"@Access has to be placed on the field with an access type of AccessType.FIELD. " +
|
||||
"Using AccessType.PROPERTY on the field has no effect", id = 453)
|
||||
String accessTypeOverrideShouldBeField( String className );
|
||||
|
||||
@LogMessage(level = WARN)
|
||||
@Message(
|
||||
value = "Encountered request for locking however dialect reports that database prefers locking be done in a " +
|
||||
"separate select (follow-on locking); results will be locked after initial query executes",
|
||||
id = 454
|
||||
id = 444
|
||||
)
|
||||
void usingFollowOnLocking();
|
||||
|
||||
|
@ -1639,7 +1597,7 @@ public interface CoreMessageLogger extends BasicLogger {
|
|||
@Message(
|
||||
value = "Alias-specific lock modes requested, which is not currently supported with follow-on locking; " +
|
||||
"all acquired locks will be [%s]",
|
||||
id = 455
|
||||
id = 445
|
||||
)
|
||||
void aliasSpecificLockingWithFollowOnLocking(LockMode lockMode);
|
||||
|
||||
|
@ -1647,7 +1605,7 @@ public interface CoreMessageLogger extends BasicLogger {
|
|||
@Message(
|
||||
value = "embed-xml attributes were intended to be used for DOM4J entity mode. Since that entity mode has been " +
|
||||
"removed, embed-xml attributes are no longer supported and should be removed from mappings.",
|
||||
id = 456
|
||||
id = 446
|
||||
)
|
||||
void embedXmlAttributesNoLongerSupported();
|
||||
|
||||
|
@ -1661,4 +1619,44 @@ public interface CoreMessageLogger extends BasicLogger {
|
|||
@LogMessage(level = INFO)
|
||||
@Message( value = "'javax.persistence.validation.mode' named multiple values : %s", id = 448 )
|
||||
void multipleValidationModes(String modes);
|
||||
|
||||
@Message(value = "@CollectionTable and @JoinTable specified on the same attribute. Check %s#%s", id = 449)
|
||||
String collectionTableAndJoinTableUsedTogether(String entityName, String propertyName);
|
||||
|
||||
@Message(value = "@CollectionTable annotation without a @ElementCollection. Check %s#%s", id = 450)
|
||||
String collectionTableWithoutElementCollection(String entityName, String propertyName);
|
||||
|
||||
@Message(value = "@JoinTable annotation without an association. Check %s#%s", id = 451)
|
||||
String joinTableForNonAssociationAttribute(String entityName, String propertyName);
|
||||
|
||||
@LogMessage( level = ERROR )
|
||||
@Message( value = "Illegal argument on static metamodel field injection : %s#%s; expected type : %s; encountered type : %s", id = 452 )
|
||||
void illegalArgumentOnStaticMetamodelFieldInjection( String metamodelClassName,
|
||||
String attributeName,
|
||||
String attributeJavaType,
|
||||
String metamodelFieldJavaType );
|
||||
|
||||
@LogMessage( level = ERROR )
|
||||
@Message( value = "Unable to locate static metamodel field : %s#%s", id = 453 )
|
||||
void unableToLocateStaticMetamodelField( String metamodelClassName,
|
||||
String attributeName );
|
||||
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.FIELD. To override the access for an attribute " +
|
||||
"@Access has to be placed on the property (getter)", id = 454)
|
||||
String accessTypeOverrideShouldBeAnnotatedOnProperty( String className );
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.FIELD. To override the access for an attribute " +
|
||||
"@Access has to be placed on the property (getter) with an access type of AccessType.PROPERTY. " +
|
||||
"Using AccessType.FIELD on the property has no effect", id = 455)
|
||||
String accessTypeOverrideShouldBeProperty( String className );
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.PROPERTY. To override the access for a field " +
|
||||
"@Access has to be placed on the field ", id = 456)
|
||||
String accessTypeOverrideShouldBeAnnotatedOnField( String className );
|
||||
|
||||
@Message(value = "The access type of class %s is AccessType.PROPERTY. To override the access for a field " +
|
||||
"@Access has to be placed on the field with an access type of AccessType.FIELD. " +
|
||||
"Using AccessType.PROPERTY on the field has no effect", id = 457)
|
||||
String accessTypeOverrideShouldBeField( String className );
|
||||
}
|
||||
|
|
|
@ -127,8 +127,11 @@ public class EnumConversionHelper {
|
|||
case LOCK: {
|
||||
return CascadeStyles.LOCK;
|
||||
}
|
||||
case DELETE_ORPHAN: {
|
||||
return CascadeStyles.DELETE_ORPHAN;
|
||||
}
|
||||
default: {
|
||||
throw new AssertionFailure( "Unknown cascade type" );
|
||||
throw new AssertionFailure( "Unknown cascade type: " + cascadeType );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,6 +40,7 @@ import org.hibernate.HibernateException;
|
|||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.hibernate.internal.util.ReflectHelper;
|
||||
import org.hibernate.internal.util.StringHelper;
|
||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||
import org.hibernate.usertype.DynamicParameterizedType;
|
||||
import org.hibernate.usertype.EnhancedUserType;
|
||||
|
@ -70,7 +71,10 @@ import org.hibernate.usertype.LoggableUserType;
|
|||
@SuppressWarnings("unchecked")
|
||||
public class EnumType implements EnhancedUserType, DynamicParameterizedType,LoggableUserType, Serializable {
|
||||
private static final Logger LOG = Logger.getLogger( EnumType.class.getName() );
|
||||
|
||||
/**
|
||||
* @deprecated use {@link DynamicParameterizedType#RETURNED_CLASS} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String ENUM = "enumClass";
|
||||
public static final String NAMED = "useNamed";
|
||||
public static final String TYPE = "type";
|
||||
|
@ -234,13 +238,15 @@ public class EnumType implements EnhancedUserType, DynamicParameterizedType,Logg
|
|||
}
|
||||
else {
|
||||
String enumClassName = (String) parameters.get( ENUM );
|
||||
if( StringHelper.isEmpty( enumClassName )){
|
||||
enumClassName = (String)parameters.get( DynamicParameterizedType.RETURNED_CLASS );
|
||||
}
|
||||
try {
|
||||
enumClass = ReflectHelper.classForName( enumClassName, this.getClass() ).asSubclass( Enum.class );
|
||||
}
|
||||
catch ( ClassNotFoundException exception ) {
|
||||
throw new HibernateException( "Enum class not found", exception );
|
||||
}
|
||||
|
||||
final Object useNamedSetting = parameters.get( NAMED );
|
||||
if ( useNamedSetting != null ) {
|
||||
final boolean useNamed = ConfigurationHelper.getBoolean( NAMED, parameters );
|
||||
|
|
|
@ -82,7 +82,7 @@ public class ElementCollectionBindingTest extends BaseAnnotationBindingTestCase
|
|||
catch ( MappingException e ) {
|
||||
assertEquals( "Unexpected error origin", TestEntity.class.getName(), e.getOrigin().getName() );
|
||||
assertEquals( "Unexpected type", SourceType.ANNOTATION, e.getOrigin().getType() );
|
||||
assertTrue( "Wrong error message", e.getMessage().startsWith( "HHH000444" ) );
|
||||
assertTrue( "Wrong error message", e.getMessage().startsWith( "HHH000451" ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -115,7 +115,7 @@ public class ElementCollectionBindingTest extends BaseAnnotationBindingTestCase
|
|||
catch ( MappingException e ) {
|
||||
assertEquals( "Unexpected error origin", TestEntity2.class.getName(), e.getOrigin().getName() );
|
||||
assertEquals( "Unexpected type", SourceType.ANNOTATION, e.getOrigin().getType() );
|
||||
assertTrue( "Wrong error message", e.getMessage().startsWith( "HHH000446" ) );
|
||||
assertTrue( "Wrong error message", e.getMessage().startsWith( "HHH000449" ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.hibernate.cfg.Configuration;
|
|||
import org.hibernate.metamodel.spi.relational.Column;
|
||||
import org.hibernate.test.util.SchemaUtil;
|
||||
import org.hibernate.testing.DialectChecks;
|
||||
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
|
||||
import org.hibernate.testing.RequiresDialectFeature;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
|
||||
|
@ -75,7 +74,6 @@ public class DDLWithoutCallbackTest extends BaseCoreFunctionalTestCase {
|
|||
|
||||
@Test
|
||||
@RequiresDialectFeature(DialectChecks.SupportsColumnCheck.class)
|
||||
@FailureExpectedWithNewMetamodel
|
||||
public void testRangeChecksGetApplied() {
|
||||
Range range = new Range( 1 );
|
||||
assertDatabaseConstraintViolationThrown( range );
|
||||
|
|
|
@ -44,6 +44,7 @@ import org.hibernate.test.annotations.embedded.Person;
|
|||
import org.hibernate.test.annotations.embedded.Summary;
|
||||
import org.hibernate.test.annotations.embedded.WealthyPerson;
|
||||
import org.hibernate.test.event.collection.detached.Alias;
|
||||
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
@ -54,6 +55,7 @@ import static org.junit.Assert.assertTrue;
|
|||
/**
|
||||
* @author Strong Liu <stliu@hibernate.org>
|
||||
*/
|
||||
@FailureExpectedWithNewMetamodel
|
||||
public class IndexTest extends BaseCoreFunctionalTestCase {
|
||||
@Override
|
||||
protected Class<?>[] getAnnotatedClasses() {
|
||||
|
@ -157,7 +159,7 @@ public class IndexTest extends BaseCoreFunctionalTestCase {
|
|||
assertSame( collectionTable, index.getTable() );
|
||||
}
|
||||
|
||||
@Test
|
||||
// @Test
|
||||
public void testTableGeneratorIndex(){
|
||||
//todo
|
||||
}
|
||||
|
|
|
@ -1,15 +1,28 @@
|
|||
//$Id: A320.java 14736 2008-06-04 14:23:42Z hardy.ferentschik $
|
||||
package org.hibernate.test.annotations.onetoone.primarykey;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.jboss.logging.Logger;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.hibernate.cfg.AnnotationConfiguration;
|
||||
import org.hibernate.cfg.AvailableSettings;
|
||||
import org.hibernate.cfg.Environment;
|
||||
import org.hibernate.dialect.SQLServerDialect;
|
||||
import org.hibernate.mapping.MetadataSource;
|
||||
import org.hibernate.metamodel.MetadataSources;
|
||||
import org.hibernate.metamodel.spi.MetadataImplementor;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
|
||||
import org.hibernate.testing.ServiceRegistryBuilder;
|
||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||
import org.hibernate.tool.schema.spi.SchemaCreator;
|
||||
import org.hibernate.tool.schema.spi.SchemaManagementTool;
|
||||
|
||||
/**
|
||||
* Test harness for ANN-742.
|
||||
|
@ -17,27 +30,53 @@ import org.hibernate.testing.ServiceRegistryBuilder;
|
|||
* @author Hardy Ferentschik
|
||||
*
|
||||
*/
|
||||
public class NullablePrimaryKeyTest {
|
||||
@FailureExpectedWithNewMetamodel
|
||||
public class NullablePrimaryKeyTest extends BaseUnitTestCase {
|
||||
private static final Logger log = Logger.getLogger( NullablePrimaryKeyTest.class );
|
||||
@Test
|
||||
public void testGeneratedSql() {
|
||||
|
||||
ServiceRegistry serviceRegistry = null;
|
||||
Properties properties = new Properties();
|
||||
properties.putAll( Environment.getProperties() );
|
||||
properties.setProperty( AvailableSettings.DIALECT, SQLServerDialect.class.getName() );
|
||||
ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( properties );
|
||||
try {
|
||||
AnnotationConfiguration config = new AnnotationConfiguration();
|
||||
config.addAnnotatedClass(Address.class);
|
||||
config.addAnnotatedClass(Person.class);
|
||||
serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( Environment.getProperties() );
|
||||
config.buildSessionFactory( serviceRegistry );
|
||||
String[] schema = config
|
||||
.generateSchemaCreationScript(new SQLServerDialect());
|
||||
for (String s : schema) {
|
||||
log.debug(s);
|
||||
MetadataSources metadataSource = new MetadataSources(serviceRegistry);
|
||||
metadataSource.addAnnotatedClass( Address.class ).addAnnotatedClass( Person.class );
|
||||
MetadataImplementor metadata = (MetadataImplementor) metadataSource.buildMetadata();
|
||||
metadata.getDatabase().getJdbcEnvironment();
|
||||
|
||||
SchemaManagementTool schemaManagementTool = serviceRegistry.getService( SchemaManagementTool.class );
|
||||
SchemaCreator schemaCreator = schemaManagementTool.getSchemaCreator( new HashMap() );
|
||||
final List<String> commands = new ArrayList<String>();
|
||||
final org.hibernate.tool.schema.spi.Target target = new org.hibernate.tool.schema.spi.Target() {
|
||||
@Override
|
||||
public boolean acceptsImportScriptActions() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepare() {
|
||||
commands.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void accept(String command) {
|
||||
commands.add( command );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void release() {
|
||||
}
|
||||
};
|
||||
schemaCreator.doCreation( metadata.getDatabase(), false, target );
|
||||
for ( String s : commands ) {
|
||||
log.debug( s );
|
||||
}
|
||||
String expectedMappingTableSql = "create table personAddress (person_id numeric(19,0) not null, " +
|
||||
"address_id numeric(19,0), primary key (person_id))";
|
||||
Assert.assertEquals( "Wrong SQL", expectedMappingTableSql, schema[2] );
|
||||
Assert.assertEquals( "Wrong SQL", expectedMappingTableSql, commands.get( 2 ) );
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Assert.fail(e.getMessage());
|
||||
}
|
||||
finally {
|
||||
|
|
|
@ -28,6 +28,7 @@ import org.junit.Test;
|
|||
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.collection.internal.PersistentMap;
|
||||
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
@ -41,6 +42,7 @@ import static org.junit.Assert.assertTrue;
|
|||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
@FailureExpectedWithNewMetamodel
|
||||
public class PersistentMapTest extends BaseCoreFunctionalTestCase {
|
||||
@Override
|
||||
public String[] getMappings() {
|
||||
|
|
|
@ -30,6 +30,7 @@ import org.hibernate.Query;
|
|||
import org.hibernate.Session;
|
||||
import org.hibernate.dialect.MySQLDialect;
|
||||
import org.hibernate.dialect.SQLServerDialect;
|
||||
import org.hibernate.testing.FailureExpectedWithNewMetamodel;
|
||||
import org.hibernate.testing.SkipForDialect;
|
||||
import org.hibernate.testing.SkipForDialects;
|
||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||
|
@ -41,6 +42,7 @@ import static org.junit.Assert.assertTrue;
|
|||
/**
|
||||
* @author Janario Oliveira
|
||||
*/
|
||||
@FailureExpectedWithNewMetamodel
|
||||
public class NamedNativeQueryTest extends BaseCoreFunctionalTestCase {
|
||||
|
||||
private FromEntity createFrom(String name, String lastName) {
|
||||
|
|
|
@ -35,6 +35,8 @@ import org.hibernate.dialect.Dialect;
|
|||
import org.hibernate.dialect.H2Dialect;
|
||||
import org.hibernate.engine.spi.Mapping;
|
||||
import org.hibernate.mapping.AuxiliaryDatabaseObject;
|
||||
import org.hibernate.metamodel.spi.MetadataImplementor;
|
||||
import org.hibernate.metamodel.spi.relational.Database;
|
||||
import org.hibernate.procedure.ProcedureCall;
|
||||
import org.hibernate.procedure.ProcedureResult;
|
||||
import org.hibernate.result.ResultSetReturn;
|
||||
|
@ -53,23 +55,25 @@ import static org.junit.Assert.fail;
|
|||
*/
|
||||
@RequiresDialect( H2Dialect.class )
|
||||
public class StoredProcedureTest extends BaseCoreFunctionalTestCase {
|
||||
@Override
|
||||
protected void configure(Configuration configuration) {
|
||||
super.configure( configuration );
|
||||
configuration.addAuxiliaryDatabaseObject(
|
||||
new AuxiliaryDatabaseObject() {
|
||||
@Override
|
||||
public void addDialectScope(String dialectName) {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void afterConstructAndConfigureMetadata(MetadataImplementor metadataImplementor) {
|
||||
Database database = metadataImplementor.getDatabase();
|
||||
database.addAuxiliaryDatabaseObject( new org.hibernate.metamodel.spi.relational.AuxiliaryDatabaseObject() {
|
||||
@Override
|
||||
public boolean appliesToDialect(Dialect dialect) {
|
||||
return H2Dialect.class.isInstance( dialect );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
|
||||
return "CREATE ALIAS findOneUser AS $$\n" +
|
||||
public boolean beforeTablesOnCreation() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] sqlCreateStrings(Dialect dialect) {
|
||||
String [] strings = new String[1];
|
||||
strings[0] = "CREATE ALIAS findOneUser AS $$\n" +
|
||||
"import org.h2.tools.SimpleResultSet;\n" +
|
||||
"import java.sql.*;\n" +
|
||||
"@CODE\n" +
|
||||
|
@ -81,29 +85,37 @@ public class StoredProcedureTest extends BaseCoreFunctionalTestCase {
|
|||
" return rs;\n" +
|
||||
"}\n" +
|
||||
"$$";
|
||||
return strings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
|
||||
return "DROP ALIAS findUser IF EXISTS";
|
||||
public String[] sqlDropStrings(Dialect dialect) {
|
||||
String [] strings = new String[1];
|
||||
strings[0]= "DROP ALIAS findUser IF EXISTS";
|
||||
return strings;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
configuration.addAuxiliaryDatabaseObject(
|
||||
new AuxiliaryDatabaseObject() {
|
||||
@Override
|
||||
public void addDialectScope(String dialectName) {
|
||||
public String getExportIdentifier() {
|
||||
return "findOneUser";
|
||||
}
|
||||
} );
|
||||
|
||||
database.addAuxiliaryDatabaseObject( new org.hibernate.metamodel.spi.relational.AuxiliaryDatabaseObject() {
|
||||
@Override
|
||||
public boolean appliesToDialect(Dialect dialect) {
|
||||
return H2Dialect.class.isInstance( dialect );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
|
||||
return "CREATE ALIAS findUsers AS $$\n" +
|
||||
public boolean beforeTablesOnCreation() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] sqlCreateStrings(Dialect dialect) {
|
||||
String [] strings = new String[1];
|
||||
strings[0] = "CREATE ALIAS findUsers AS $$\n" +
|
||||
"import org.h2.tools.SimpleResultSet;\n" +
|
||||
"import java.sql.*;\n" +
|
||||
"@CODE\n" +
|
||||
|
@ -117,29 +129,37 @@ public class StoredProcedureTest extends BaseCoreFunctionalTestCase {
|
|||
" return rs;\n" +
|
||||
"}\n" +
|
||||
"$$";
|
||||
return strings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
|
||||
return "DROP ALIAS findUser IF EXISTS";
|
||||
public String[] sqlDropStrings(Dialect dialect) {
|
||||
String [] strings = new String[1];
|
||||
strings[0]= "DROP ALIAS findUser IF EXISTS";
|
||||
return strings;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
configuration.addAuxiliaryDatabaseObject(
|
||||
new AuxiliaryDatabaseObject() {
|
||||
@Override
|
||||
public void addDialectScope(String dialectName) {
|
||||
public String getExportIdentifier() {
|
||||
return "findUser2";
|
||||
}
|
||||
} );
|
||||
|
||||
database.addAuxiliaryDatabaseObject( new org.hibernate.metamodel.spi.relational.AuxiliaryDatabaseObject() {
|
||||
@Override
|
||||
public boolean appliesToDialect(Dialect dialect) {
|
||||
return H2Dialect.class.isInstance( dialect );
|
||||
}
|
||||
|
||||
@Override
|
||||
public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
|
||||
return "CREATE ALIAS findUserRange AS $$\n" +
|
||||
public boolean beforeTablesOnCreation() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] sqlCreateStrings(Dialect dialect) {
|
||||
String [] strings = new String[1];
|
||||
strings[0] = "CREATE ALIAS findUserRange AS $$\n" +
|
||||
"import org.h2.tools.SimpleResultSet;\n" +
|
||||
"import java.sql.*;\n" +
|
||||
"@CODE\n" +
|
||||
|
@ -153,16 +173,133 @@ public class StoredProcedureTest extends BaseCoreFunctionalTestCase {
|
|||
" return rs;\n" +
|
||||
"}\n" +
|
||||
"$$";
|
||||
return strings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
|
||||
return "DROP ALIAS findUser IF EXISTS";
|
||||
public String[] sqlDropStrings(Dialect dialect) {
|
||||
String [] strings = new String[1];
|
||||
strings[0]= "DROP ALIAS findUser IF EXISTS";
|
||||
return strings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getExportIdentifier() {
|
||||
return "findUser";
|
||||
}
|
||||
);
|
||||
} );
|
||||
}
|
||||
|
||||
// @Override
|
||||
// protected void configure(Configuration configuration) {
|
||||
// super.configure( configuration );
|
||||
// configuration.addAuxiliaryDatabaseObject(
|
||||
// new AuxiliaryDatabaseObject() {
|
||||
// @Override
|
||||
// public void addDialectScope(String dialectName) {
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean appliesToDialect(Dialect dialect) {
|
||||
// return H2Dialect.class.isInstance( dialect );
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
|
||||
// return "CREATE ALIAS findOneUser AS $$\n" +
|
||||
// "import org.h2.tools.SimpleResultSet;\n" +
|
||||
// "import java.sql.*;\n" +
|
||||
// "@CODE\n" +
|
||||
// "ResultSet findOneUser() {\n" +
|
||||
// " SimpleResultSet rs = new SimpleResultSet();\n" +
|
||||
// " rs.addColumn(\"ID\", Types.INTEGER, 10, 0);\n" +
|
||||
// " rs.addColumn(\"NAME\", Types.VARCHAR, 255, 0);\n" +
|
||||
// " rs.addRow(1, \"Steve\");\n" +
|
||||
// " return rs;\n" +
|
||||
// "}\n" +
|
||||
// "$$";
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
|
||||
// return "DROP ALIAS findUser IF EXISTS";
|
||||
// }
|
||||
// }
|
||||
// );
|
||||
//
|
||||
// configuration.addAuxiliaryDatabaseObject(
|
||||
// new AuxiliaryDatabaseObject() {
|
||||
// @Override
|
||||
// public void addDialectScope(String dialectName) {
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean appliesToDialect(Dialect dialect) {
|
||||
// return H2Dialect.class.isInstance( dialect );
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
|
||||
// return "CREATE ALIAS findUsers AS $$\n" +
|
||||
// "import org.h2.tools.SimpleResultSet;\n" +
|
||||
// "import java.sql.*;\n" +
|
||||
// "@CODE\n" +
|
||||
// "ResultSet findUsers() {\n" +
|
||||
// " SimpleResultSet rs = new SimpleResultSet();\n" +
|
||||
// " rs.addColumn(\"ID\", Types.INTEGER, 10, 0);\n" +
|
||||
// " rs.addColumn(\"NAME\", Types.VARCHAR, 255, 0);\n" +
|
||||
// " rs.addRow(1, \"Steve\");\n" +
|
||||
// " rs.addRow(2, \"John\");\n" +
|
||||
// " rs.addRow(3, \"Jane\");\n" +
|
||||
// " return rs;\n" +
|
||||
// "}\n" +
|
||||
// "$$";
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
|
||||
// return "DROP ALIAS findUser IF EXISTS";
|
||||
// }
|
||||
// }
|
||||
// );
|
||||
//
|
||||
// configuration.addAuxiliaryDatabaseObject(
|
||||
// new AuxiliaryDatabaseObject() {
|
||||
// @Override
|
||||
// public void addDialectScope(String dialectName) {
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean appliesToDialect(Dialect dialect) {
|
||||
// return H2Dialect.class.isInstance( dialect );
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
|
||||
// return "CREATE ALIAS findUserRange AS $$\n" +
|
||||
// "import org.h2.tools.SimpleResultSet;\n" +
|
||||
// "import java.sql.*;\n" +
|
||||
// "@CODE\n" +
|
||||
// "ResultSet findUserRange(int start, int end) {\n" +
|
||||
// " SimpleResultSet rs = new SimpleResultSet();\n" +
|
||||
// " rs.addColumn(\"ID\", Types.INTEGER, 10, 0);\n" +
|
||||
// " rs.addColumn(\"NAME\", Types.VARCHAR, 255, 0);\n" +
|
||||
// " for ( int i = start; i < end; i++ ) {\n" +
|
||||
// " rs.addRow(1, \"User \" + i );\n" +
|
||||
// " }\n" +
|
||||
// " return rs;\n" +
|
||||
// "}\n" +
|
||||
// "$$";
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String sqlDropString(Dialect dialect, String defaultCatalog, String defaultSchema) {
|
||||
// return "DROP ALIAS findUser IF EXISTS";
|
||||
// }
|
||||
// }
|
||||
// );
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void baseTest() {
|
||||
Session session = openSession();
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.stdout.Target=System.out
|
||||
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
|
||||
|
||||
|
||||
log4j.rootLogger=info, stdout
|
||||
|
||||
log4j.logger.org.hibernate.tool.hbm2ddl=trace
|
||||
log4j.logger.org.hibernate.testing.cache=debug
|
||||
|
||||
# SQL Logging - HHH-6833
|
||||
log4j.logger.org.hibernate.SQL=debug
|
||||
|
||||
log4j.logger.org.hibernate.hql.internal.ast=debug
|
||||
|
||||
log4j.logger.org.hibernate.sql.ordering.antlr=debug
|
|
@ -27,7 +27,8 @@ import javax.persistence.PersistenceException;
|
|||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.hibernate.engine.jdbc.spi.JdbcConnectionAccess;
|
||||
import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
|
||||
|
||||
|
||||
/**
|
||||
* Defines access to a JDBC Connection for use in Schema generation
|
||||
|
|
|
@ -42,9 +42,9 @@ import org.hibernate.boot.registry.selector.spi.StrategySelector;
|
|||
import org.hibernate.cfg.Configuration;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
||||
import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
|
||||
import org.hibernate.engine.jdbc.dialect.spi.DatabaseInfoDialectResolver;
|
||||
import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcConnectionAccess;
|
||||
import org.hibernate.internal.util.StringHelper;
|
||||
import org.hibernate.internal.util.config.ConfigurationHelper;
|
||||
import org.hibernate.jpa.AvailableSettings;
|
||||
|
|
Loading…
Reference in New Issue