mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-10 05:04:52 +00:00
HHH-6392 Introducing a container for the attribute override values
This commit is contained in:
parent
b413299847
commit
a353d34f78
@ -0,0 +1,73 @@
|
||||
package org.hibernate.metamodel.source.annotations.attribute;
|
||||
|
||||
import org.jboss.jandex.AnnotationInstance;
|
||||
|
||||
import org.hibernate.AssertionFailure;
|
||||
import org.hibernate.metamodel.source.annotations.JPADotNames;
|
||||
|
||||
/**
|
||||
* Contains the information about a single {@link javax.persistence.AttributeOverride}. Instances of this class
|
||||
* are creating during annotation processing and then applied onto the persistence attributes.
|
||||
*
|
||||
* @author Hardy Ferentschik
|
||||
*/
|
||||
public class AttributeOverride {
|
||||
private final ColumnValues columnValues;
|
||||
private final String attributePath;
|
||||
|
||||
public AttributeOverride(AnnotationInstance attributeOverrideAnnotation) {
|
||||
this(null, attributeOverrideAnnotation);
|
||||
}
|
||||
|
||||
public AttributeOverride(String prefix, AnnotationInstance attributeOverrideAnnotation) {
|
||||
if ( attributeOverrideAnnotation != null && !JPADotNames.ATTRIBUTE_OVERRIDE.equals( attributeOverrideAnnotation.name() ) ) {
|
||||
throw new AssertionFailure( "A @Column annotation needs to be passed to the constructor" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
columnValues = null;
|
||||
attributePath = "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append( "AttributeOverride" );
|
||||
sb.append( "{columnValues=" ).append( columnValues );
|
||||
sb.append( ", attributePath='" ).append( attributePath ).append( '\'' );
|
||||
sb.append( '}' );
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if ( this == o ) {
|
||||
return true;
|
||||
}
|
||||
if ( o == null || getClass() != o.getClass() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
AttributeOverride that = (AttributeOverride) o;
|
||||
|
||||
if ( attributePath != null ? !attributePath.equals( that.attributePath ) : that.attributePath != null ) {
|
||||
return false;
|
||||
}
|
||||
if ( columnValues != null ? !columnValues.equals( that.columnValues ) : that.columnValues != null ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = columnValues != null ? columnValues.hashCode() : 0;
|
||||
result = 31 * result + ( attributePath != null ? attributePath.hashCode() : 0 );
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
import org.hibernate.metamodel.source.annotations.JPADotNames;
|
||||
|
||||
/**
|
||||
* Container for the properties defined by {@code @Column}.
|
||||
* Container for the properties defined by {@link javax.persistence.Column}.
|
||||
*
|
||||
* @author Hardy Ferentschik
|
||||
*/
|
||||
@ -46,7 +46,7 @@ public class ColumnValues {
|
||||
private int precision = 0;
|
||||
private int scale = 0;
|
||||
|
||||
public ColumnValues() {
|
||||
ColumnValues() {
|
||||
this( null );
|
||||
}
|
||||
|
||||
@ -58,6 +58,7 @@ public ColumnValues(AnnotationInstance columnAnnotation) {
|
||||
}
|
||||
|
||||
private void applyColumnValues(AnnotationInstance columnAnnotation) {
|
||||
// if the column annotation is null we don't have to do anything. Everything is already defaulted.
|
||||
if ( columnAnnotation == null ) {
|
||||
return;
|
||||
}
|
||||
@ -210,6 +211,66 @@ public String toString() {
|
||||
sb.append( '}' );
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if ( this == o ) {
|
||||
return true;
|
||||
}
|
||||
if ( o == null || getClass() != o.getClass() ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ColumnValues that = (ColumnValues) o;
|
||||
|
||||
if ( insertable != that.insertable ) {
|
||||
return false;
|
||||
}
|
||||
if ( length != that.length ) {
|
||||
return false;
|
||||
}
|
||||
if ( nullable != that.nullable ) {
|
||||
return false;
|
||||
}
|
||||
if ( precision != that.precision ) {
|
||||
return false;
|
||||
}
|
||||
if ( scale != that.scale ) {
|
||||
return false;
|
||||
}
|
||||
if ( unique != that.unique ) {
|
||||
return false;
|
||||
}
|
||||
if ( updatable != that.updatable ) {
|
||||
return false;
|
||||
}
|
||||
if ( columnDefinition != null ? !columnDefinition.equals( that.columnDefinition ) : that.columnDefinition != null ) {
|
||||
return false;
|
||||
}
|
||||
if ( name != null ? !name.equals( that.name ) : that.name != null ) {
|
||||
return false;
|
||||
}
|
||||
if ( table != null ? !table.equals( that.table ) : that.table != null ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = name != null ? name.hashCode() : 0;
|
||||
result = 31 * result + ( unique ? 1 : 0 );
|
||||
result = 31 * result + ( nullable ? 1 : 0 );
|
||||
result = 31 * result + ( insertable ? 1 : 0 );
|
||||
result = 31 * result + ( updatable ? 1 : 0 );
|
||||
result = 31 * result + ( columnDefinition != null ? columnDefinition.hashCode() : 0 );
|
||||
result = 31 * result + ( table != null ? table.hashCode() : 0 );
|
||||
result = 31 * result + length;
|
||||
result = 31 * result + precision;
|
||||
result = 31 * result + scale;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -146,8 +146,6 @@ public ConfiguredClass(ClassInfo classInfo,
|
||||
this.idAttributeMap = new TreeMap<String, SimpleAttribute>();
|
||||
this.associationAttributeMap = new TreeMap<String, AssociationAttribute>();
|
||||
|
||||
// find transient field and method names
|
||||
findTransientFieldAndMethodNames();
|
||||
collectAttributes();
|
||||
}
|
||||
|
||||
@ -244,6 +242,9 @@ private AccessType determineClassAccessType(AccessType defaultAccessType) {
|
||||
* Find all attributes for this configured class and add them to the corresponding map
|
||||
*/
|
||||
private void collectAttributes() {
|
||||
// find transient field and method names
|
||||
findTransientFieldAndMethodNames();
|
||||
|
||||
// use the class mate library to generic types
|
||||
ResolvedTypeWithMembers resolvedType = context.resolveMemberTypes( context.getResolvedType( clazz ) );
|
||||
for ( HierarchicType hierarchicType : resolvedType.allTypesAndOverrides() ) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user