use of org.hibernate.mapping.Property in project hibernate-orm by hibernate.
the class ComponentNamingStrategyTest method testDefaultNamingStrategy.
@Test
public void testDefaultNamingStrategy() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try {
final MetadataSources ms = new MetadataSources(ssr);
ms.addAnnotatedClass(Container.class).addAnnotatedClass(Item.class);
final Metadata metadata = ms.getMetadataBuilder().applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE).build();
final PersistentClass pc = metadata.getEntityBinding(Container.class.getName());
Property p = pc.getProperty("items");
Bag value = assertTyping(Bag.class, p.getValue());
SimpleValue elementValue = assertTyping(SimpleValue.class, value.getElement());
assertEquals(1, elementValue.getColumnSpan());
Column column = assertTyping(Column.class, elementValue.getColumnIterator().next());
assertEquals(column.getName(), "name");
} finally {
StandardServiceRegistryBuilder.destroy(ssr);
}
}
use of org.hibernate.mapping.Property in project hibernate-orm by hibernate.
the class UseNationalizedCharDataSettingTest method testSetting.
@Test
@TestForIssue(jiraKey = "HHH-10528")
public void testSetting() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySetting(AvailableSettings.USE_NATIONALIZED_CHARACTER_DATA, true).build();
try {
final MetadataSources ms = new MetadataSources(ssr);
ms.addAnnotatedClass(NationalizedBySettingEntity.class);
final Metadata metadata = ms.buildMetadata();
final PersistentClass pc = metadata.getEntityBinding(NationalizedBySettingEntity.class.getName());
final Property nameAttribute = pc.getProperty("name");
if (metadata.getDatabase().getDialect() instanceof PostgreSQL81Dialect) {
// See issue HHH-10693
assertSame(StringType.INSTANCE, nameAttribute.getType());
} else {
assertSame(StringNVarcharType.INSTANCE, nameAttribute.getType());
}
} finally {
StandardServiceRegistryBuilder.destroy(ssr);
}
}
use of org.hibernate.mapping.Property in project hibernate-orm by hibernate.
the class UseNationalizedCharDataSettingTest method testSettingOnCharType.
@Test
@TestForIssue(jiraKey = "HHH-11205")
public void testSettingOnCharType() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySetting(AvailableSettings.USE_NATIONALIZED_CHARACTER_DATA, true).build();
try {
final MetadataSources ms = new MetadataSources(ssr);
ms.addAnnotatedClass(NationalizedBySettingEntity.class);
final Metadata metadata = ms.buildMetadata();
final PersistentClass pc = metadata.getEntityBinding(NationalizedBySettingEntity.class.getName());
final Property nameAttribute = pc.getProperty("flag");
if (metadata.getDatabase().getDialect() instanceof PostgreSQL81Dialect) {
assertSame(CharacterType.INSTANCE, nameAttribute.getType());
} else {
assertSame(CharacterNCharType.INSTANCE, nameAttribute.getType());
}
} finally {
StandardServiceRegistryBuilder.destroy(ssr);
}
}
use of org.hibernate.mapping.Property in project hibernate-orm by hibernate.
the class BaseNamingTests method validateCustomer.
protected void validateCustomer(Metadata metadata) {
final PersistentClass customerBinding = metadata.getEntityBinding(Customer.class.getName());
assertNotNull(customerBinding);
validateCustomerPrimaryTableName(customerBinding.getTable().getQuotedName());
assertEquals(1, customerBinding.getIdentifier().getColumnSpan());
validateCustomerPrimaryKeyColumn((Column) customerBinding.getIdentifier().getColumnIterator().next());
assertNotNull(customerBinding.getVersion());
assertEquals(1, customerBinding.getVersion().getColumnSpan());
validateCustomerVersionColumn((Column) customerBinding.getVersion().getColumnIterator().next());
final Property nameBinding = customerBinding.getProperty("name");
assertNotNull(nameBinding);
assertEquals(1, nameBinding.getColumnSpan());
validateCustomerNameColumn((Column) nameBinding.getColumnIterator().next());
final Property hqAddressBinding = customerBinding.getProperty("hqAddress");
assertNotNull(hqAddressBinding);
assertEquals(3, hqAddressBinding.getColumnSpan());
validateCustomerHqAddressComponent(assertTyping(Component.class, hqAddressBinding.getValue()));
}
use of org.hibernate.mapping.Property in project hibernate-orm by hibernate.
the class CollectionBinder method bind.
public void bind() {
this.collection = createCollection(propertyHolder.getPersistentClass());
String role = StringHelper.qualify(propertyHolder.getPath(), propertyName);
LOG.debugf("Collection role: %s", role);
collection.setRole(role);
collection.setMappedByProperty(mappedBy);
if (property.isAnnotationPresent(MapKeyColumn.class) && mapKeyPropertyName != null) {
throw new AnnotationException("Cannot mix @javax.persistence.MapKey and @MapKeyColumn or @org.hibernate.annotations.MapKey " + "on the same collection: " + StringHelper.qualify(propertyHolder.getPath(), propertyName));
}
// set explicit type information
if (explicitType != null) {
final TypeDefinition typeDef = buildingContext.getMetadataCollector().getTypeDefinition(explicitType);
if (typeDef == null) {
collection.setTypeName(explicitType);
collection.setTypeParameters(explicitTypeParameters);
} else {
collection.setTypeName(typeDef.getTypeImplementorClass().getName());
collection.setTypeParameters(typeDef.getParameters());
}
}
//set laziness
defineFetchingStrategy();
collection.setBatchSize(batchSize);
collection.setMutable(!property.isAnnotationPresent(Immutable.class));
//work on association
boolean isMappedBy = !BinderHelper.isEmptyAnnotationValue(mappedBy);
final OptimisticLock lockAnn = property.getAnnotation(OptimisticLock.class);
final boolean includeInOptimisticLockChecks = (lockAnn != null) ? !lockAnn.excluded() : !isMappedBy;
collection.setOptimisticLocked(includeInOptimisticLockChecks);
Persister persisterAnn = property.getAnnotation(Persister.class);
if (persisterAnn != null) {
collection.setCollectionPersisterClass(persisterAnn.impl());
}
applySortingAndOrdering(collection);
//set cache
if (StringHelper.isNotEmpty(cacheConcurrencyStrategy)) {
collection.setCacheConcurrencyStrategy(cacheConcurrencyStrategy);
collection.setCacheRegionName(cacheRegionName);
}
//SQL overriding
SQLInsert sqlInsert = property.getAnnotation(SQLInsert.class);
SQLUpdate sqlUpdate = property.getAnnotation(SQLUpdate.class);
SQLDelete sqlDelete = property.getAnnotation(SQLDelete.class);
SQLDeleteAll sqlDeleteAll = property.getAnnotation(SQLDeleteAll.class);
Loader loader = property.getAnnotation(Loader.class);
if (sqlInsert != null) {
collection.setCustomSQLInsert(sqlInsert.sql().trim(), sqlInsert.callable(), ExecuteUpdateResultCheckStyle.fromExternalName(sqlInsert.check().toString().toLowerCase(Locale.ROOT)));
}
if (sqlUpdate != null) {
collection.setCustomSQLUpdate(sqlUpdate.sql(), sqlUpdate.callable(), ExecuteUpdateResultCheckStyle.fromExternalName(sqlUpdate.check().toString().toLowerCase(Locale.ROOT)));
}
if (sqlDelete != null) {
collection.setCustomSQLDelete(sqlDelete.sql(), sqlDelete.callable(), ExecuteUpdateResultCheckStyle.fromExternalName(sqlDelete.check().toString().toLowerCase(Locale.ROOT)));
}
if (sqlDeleteAll != null) {
collection.setCustomSQLDeleteAll(sqlDeleteAll.sql(), sqlDeleteAll.callable(), ExecuteUpdateResultCheckStyle.fromExternalName(sqlDeleteAll.check().toString().toLowerCase(Locale.ROOT)));
}
if (loader != null) {
collection.setLoaderName(loader.namedQuery());
}
if (isMappedBy && (property.isAnnotationPresent(JoinColumn.class) || property.isAnnotationPresent(JoinColumns.class) || propertyHolder.getJoinTable(property) != null)) {
String message = "Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn: ";
message += StringHelper.qualify(propertyHolder.getPath(), propertyName);
throw new AnnotationException(message);
}
collection.setInverse(isMappedBy);
//many to many may need some second pass informations
if (!oneToMany && isMappedBy) {
buildingContext.getMetadataCollector().addMappedBy(getCollectionType().getName(), mappedBy, propertyName);
}
//TODO reducce tableBinder != null and oneToMany
XClass collectionType = getCollectionType();
if (inheritanceStatePerClass == null)
throw new AssertionFailure("inheritanceStatePerClass not set");
SecondPass sp = getSecondPass(fkJoinColumns, joinColumns, inverseJoinColumns, elementColumns, mapKeyColumns, mapKeyManyToManyColumns, isEmbedded, property, collectionType, ignoreNotFound, oneToMany, tableBinder, buildingContext);
if (collectionType.isAnnotationPresent(Embeddable.class) || //JPA 2
property.isAnnotationPresent(ElementCollection.class)) {
// do it right away, otherwise @ManyToOne on composite element call addSecondPass
// and raise a ConcurrentModificationException
//sp.doSecondPass( CollectionHelper.EMPTY_MAP );
buildingContext.getMetadataCollector().addSecondPass(sp, !isMappedBy);
} else {
buildingContext.getMetadataCollector().addSecondPass(sp, !isMappedBy);
}
buildingContext.getMetadataCollector().addCollectionBinding(collection);
//property building
PropertyBinder binder = new PropertyBinder();
binder.setName(propertyName);
binder.setValue(collection);
binder.setCascade(cascadeStrategy);
if (cascadeStrategy != null && cascadeStrategy.indexOf("delete-orphan") >= 0) {
collection.setOrphanDelete(true);
}
binder.setLazy(collection.isLazy());
final LazyGroup lazyGroupAnnotation = property.getAnnotation(LazyGroup.class);
if (lazyGroupAnnotation != null) {
binder.setLazyGroup(lazyGroupAnnotation.value());
}
binder.setAccessType(accessType);
binder.setProperty(property);
binder.setInsertable(insertable);
binder.setUpdatable(updatable);
Property prop = binder.makeProperty();
//we don't care about the join stuffs because the column is on the association table.
if (!declaringClassSet)
throw new AssertionFailure("DeclaringClass is not set in CollectionBinder while binding");
propertyHolder.addProperty(prop, declaringClass);
}
Aggregations