make @AttributeAccessor annotation typesafe
This commit is contained in:
parent
ef69465f48
commit
4b56842c7f
|
@ -6,6 +6,8 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.annotations;
|
package org.hibernate.annotations;
|
||||||
|
|
||||||
|
import org.hibernate.property.access.spi.PropertyAccessStrategy;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
|
|
||||||
import static java.lang.annotation.ElementType.FIELD;
|
import static java.lang.annotation.ElementType.FIELD;
|
||||||
|
@ -43,6 +45,13 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
public @interface AttributeAccessor {
|
public @interface AttributeAccessor {
|
||||||
/**
|
/**
|
||||||
* Names the {@link org.hibernate.property.access.spi.PropertyAccessStrategy} strategy.
|
* Names the {@link org.hibernate.property.access.spi.PropertyAccessStrategy} strategy.
|
||||||
|
*
|
||||||
|
* @deprecated use {@link #strategy()}
|
||||||
*/
|
*/
|
||||||
String value();
|
@Deprecated
|
||||||
|
String value() default "";
|
||||||
|
/**
|
||||||
|
* A class implementing {@link org.hibernate.property.access.spi.PropertyAccessStrategy}.
|
||||||
|
*/
|
||||||
|
Class<? extends PropertyAccessStrategy> strategy() default PropertyAccessStrategy.class;
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ import org.hibernate.mapping.RootClass;
|
||||||
import org.hibernate.mapping.SimpleValue;
|
import org.hibernate.mapping.SimpleValue;
|
||||||
import org.hibernate.mapping.ToOne;
|
import org.hibernate.mapping.ToOne;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
|
import org.hibernate.property.access.spi.PropertyAccessStrategy;
|
||||||
import org.hibernate.tuple.AnnotationValueGeneration;
|
import org.hibernate.tuple.AnnotationValueGeneration;
|
||||||
import org.hibernate.tuple.GenerationTiming;
|
import org.hibernate.tuple.GenerationTiming;
|
||||||
import org.hibernate.tuple.ValueGeneration;
|
import org.hibernate.tuple.ValueGeneration;
|
||||||
|
@ -276,7 +277,17 @@ public class PropertyBinder {
|
||||||
|
|
||||||
if ( property.isAnnotationPresent( AttributeAccessor.class ) ) {
|
if ( property.isAnnotationPresent( AttributeAccessor.class ) ) {
|
||||||
final AttributeAccessor accessor = property.getAnnotation( AttributeAccessor.class );
|
final AttributeAccessor accessor = property.getAnnotation( AttributeAccessor.class );
|
||||||
prop.setPropertyAccessorName( accessor.value() );
|
String value = accessor.value();
|
||||||
|
Class<?> type = accessor.strategy();
|
||||||
|
if ( !value.isEmpty() ) {
|
||||||
|
prop.setPropertyAccessorName( value );
|
||||||
|
}
|
||||||
|
else if ( !PropertyAccessStrategy.class.equals(type) ) {
|
||||||
|
prop.setPropertyAccessorName( type.getName() );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new AnnotationException("@AttributeAccessor must specify a PropertyAccessStrategy type");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -83,7 +83,7 @@ public class AttributeAccessorTest {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@AttributeAccessor("org.hibernate.orm.test.bootstrap.binding.annotations.access.AttributeAccessorTest$BasicAttributeAccessor")
|
@AttributeAccessor(strategy =BasicAttributeAccessor.class)
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,7 @@ public class AttributeAccessorTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@AttributeAccessor( "org.hibernate.envers.test.integration.accesstype.AttributeAccessorTest$BasicAttributeAccessor" )
|
@AttributeAccessor( strategy =BasicAttributeAccessor.class )
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue