use of org.hibernate.annotations.AttributeAccessor in project hibernate-orm by hibernate.
the class PropertyBinder method makeProperty.
// used when the value is provided and the binding is done elsewhere
public Property makeProperty() {
validateMake();
LOG.debugf("Building property %s", name);
Property prop = new Property();
prop.setName(name);
prop.setValue(value);
prop.setLazy(lazy);
prop.setLazyGroup(lazyGroup);
prop.setCascade(cascade);
prop.setPropertyAccessorName(accessType.getType());
if (property != null) {
prop.setValueGenerationStrategy(determineValueGenerationStrategy(property));
if (property.isAnnotationPresent(AttributeAccessor.class)) {
final AttributeAccessor accessor = property.getAnnotation(AttributeAccessor.class);
prop.setPropertyAccessorName(accessor.value());
}
}
NaturalId naturalId = property != null ? property.getAnnotation(NaturalId.class) : null;
if (naturalId != null) {
if (!entityBinder.isRootEntity()) {
throw new AnnotationException("@NaturalId only valid on root entity (or its @MappedSuperclasses)");
}
if (!naturalId.mutable()) {
updatable = false;
}
prop.setNaturalIdentifier(true);
}
// HHH-4635 -- needed for dialect-specific property ordering
Lob lob = property != null ? property.getAnnotation(Lob.class) : null;
prop.setLob(lob != null);
prop.setInsertable(insertable);
prop.setUpdateable(updatable);
// this is already handled for collections in CollectionBinder...
if (Collection.class.isInstance(value)) {
prop.setOptimisticLocked(((Collection) value).isOptimisticLocked());
} else {
final OptimisticLock lockAnn = property != null ? property.getAnnotation(OptimisticLock.class) : null;
if (lockAnn != null) {
// TODO this should go to the core as a mapping validation checking
if (lockAnn.excluded() && (property.isAnnotationPresent(javax.persistence.Version.class) || property.isAnnotationPresent(Id.class) || property.isAnnotationPresent(EmbeddedId.class))) {
throw new AnnotationException("@OptimisticLock.exclude=true incompatible with @Id, @EmbeddedId and @Version: " + StringHelper.qualify(holder.getPath(), name));
}
}
// && updatable as well???
final boolean isOwnedValue = !isToOneValue(value) || insertable;
final boolean includeInOptimisticLockChecks = (lockAnn != null) ? !lockAnn.excluded() : isOwnedValue;
prop.setOptimisticLocked(includeInOptimisticLockChecks);
}
LOG.tracev("Cascading {0} with {1}", name, cascade);
this.mappingProperty = prop;
return prop;
}
Aggregations