Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@
import org.broadleafcommerce.common.presentation.AdminPresentation;
import org.broadleafcommerce.openadmin.audit.AdminAuditableListener;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
Expand Down Expand Up @@ -86,7 +87,7 @@ public class PageFieldImpl implements PageField, ProfileEntity {

@Column(name = "LOB_VALUE", length = Integer.MAX_VALUE-1)
@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@JdbcTypeCode(SqlTypes.LONG32VARCHAR)
@AdminPresentation
protected String lobValue;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@
import org.broadleafcommerce.common.presentation.AdminPresentationClass;
import org.broadleafcommerce.common.presentation.client.VisibilityEnum;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down Expand Up @@ -80,7 +81,7 @@ public class PageItemCriteriaImpl implements PageItemCriteria, ProfileEntity {
protected Integer quantity;

@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@JdbcTypeCode(SqlTypes.LONG32VARCHAR)
@Column(name = "ORDER_ITEM_MATCH_RULE", length = Integer.MAX_VALUE - 1)
@AdminPresentation(friendlyName = "PageItemCriteriaImpl_Order_Item_Match_Rule",
group = "PageItemCriteriaImpl_Description", visibility = VisibilityEnum.HIDDEN_ALL)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@
import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransformTypes;
import org.broadleafcommerce.common.extensibility.jpa.copy.ProfileEntity;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down Expand Up @@ -66,7 +67,7 @@ public class PageRuleImpl implements PageRule, ProfileEntity {
protected Long id;

@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@JdbcTypeCode(SqlTypes.LONG32VARCHAR)
@Column(name = "MATCH_RULE", length = Integer.MAX_VALUE - 1)
protected String matchRule;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,9 @@
import org.broadleafcommerce.common.presentation.AdminPresentation;
import org.broadleafcommerce.openadmin.audit.AdminAuditableListener;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down Expand Up @@ -80,7 +81,7 @@ public class StructuredContentFieldImpl implements StructuredContentField, Profi
@AdminPresentation
@Column (name = "LOB_VALUE", length = Integer.MAX_VALUE - 1)
@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@JdbcTypeCode(SqlTypes.LONG32VARCHAR)
protected String lobValue;

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@
import org.broadleafcommerce.common.presentation.AdminPresentationClass;
import org.broadleafcommerce.common.presentation.client.VisibilityEnum;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down Expand Up @@ -86,7 +87,7 @@ public class StructuredContentItemCriteriaImpl
protected Integer quantity;

@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@JdbcTypeCode(SqlTypes.LONG32VARCHAR)
@Column(name = "ORDER_ITEM_MATCH_RULE", length = Integer.MAX_VALUE - 1)
@AdminPresentation(friendlyName = "StructuredContentItemCriteriaImpl_Order_Item_Match_Rule",
group = "StructuredContentItemCriteriaImpl_Description",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,11 @@
import org.broadleafcommerce.common.extensibility.jpa.copy.DirectCopyTransformTypes;
import org.broadleafcommerce.common.extensibility.jpa.copy.ProfileEntity;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.hibernate.annotations.Type;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down Expand Up @@ -69,7 +70,7 @@ public class StructuredContentRuleImpl implements StructuredContentRule, Profile
protected Long id;

@Lob
@Type(type = "org.hibernate.type.MaterializedClobType")
@JdbcTypeCode(SqlTypes.LONG32VARCHAR)
@Column(name = "MATCH_RULE", length = Integer.MAX_VALUE - 1)
protected String matchRule;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
import org.broadleafcommerce.openadmin.dto.TabMetadata;
import org.broadleafcommerce.openadmin.server.dao.provider.metadata.FieldMetadataProvider;
import org.broadleafcommerce.openadmin.server.service.persistence.module.FieldManager;
import org.hibernate.Criteria;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.type.Type;

Expand Down Expand Up @@ -119,7 +118,12 @@ public interface DynamicEntityDao {

List<String> getPropertyNames(Class<?> entityClass);

Criteria createCriteria(Class<?> entityClass);
/**
* @deprecated Legacy Hibernate Criteria API was removed in Hibernate 6.
* Use JPA CriteriaQuery via EntityManager.getCriteriaBuilder() instead.
*/
@Deprecated
jakarta.persistence.criteria.CriteriaQuery createCriteria(Class<?> entityClass);

Field[] getAllFields(Class<?> targetClass);

Expand Down
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
import org.broadleafcommerce.openadmin.server.service.persistence.module.FieldManager;
import org.broadleafcommerce.openadmin.server.service.persistence.validation.FieldNamePropertyValidator;
import org.broadleafcommerce.openadmin.server.service.type.MetadataProviderResponse;
import org.hibernate.Criteria;
import org.hibernate.MappingException;
import org.hibernate.Session;
import org.hibernate.mapping.PersistentClass;
Expand Down Expand Up @@ -158,8 +157,12 @@ public void setApplicationContext(ApplicationContext applicationContext) throws
}

@Override
public Criteria createCriteria(Class<?> entityClass) {
return getStandardEntityManager().unwrap(Session.class).createCriteria(entityClass);
@Deprecated
public CriteriaQuery createCriteria(Class<?> entityClass) {
CriteriaBuilder cb = getStandardEntityManager().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(entityClass);
cq.from(entityClass);
return cq;
}

@Override
Expand Down Expand Up @@ -1101,12 +1104,10 @@ protected Map<String, FieldMetadata> getPropertiesForEntityClass(
propertyTypes.add(idType);

PersistentClass persistentClass = getPersistentClass(targetClass.getName());
Iterator testIter = persistentClass.getPropertyIterator();
List<Property> propertyList = new ArrayList<>();

//check the properties for problems
while (testIter.hasNext()) {
Property property = (Property) testIter.next();
for (Property property : persistentClass.getProperties()) {
if (property.getName().contains(".")) {
throw new IllegalArgumentException("Properties from entities that utilize a period character ('.') in their name are incompatible with this system. The property name in question is: (" + property.getName() + ") from the class: (" + targetClass.getName() + ")");
}
Expand Down Expand Up @@ -1677,12 +1678,7 @@ protected void buildComponentProperties(
property = persistentClass.getProperty(prefix + propertyName);
}

Iterator componentPropertyIterator = ((org.hibernate.mapping.Component) property.getValue()).getPropertyIterator();
List<Property> componentPropertyList = new ArrayList<>();

while (componentPropertyIterator.hasNext()) {
componentPropertyList.add((Property) componentPropertyIterator.next());
}
List<Property> componentPropertyList = ((org.hibernate.mapping.Component) property.getValue()).getProperties();

Map<String, FieldMetadata> newFields = new HashMap<>();
buildProperties(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,15 +173,15 @@ public MetadataProviderResponse addMetadataFromMappingData(
Column column = null;
for (Property property : addMetadataFromMappingDataRequest.getComponentProperties()) {
if (property.getName().equals(addMetadataFromMappingDataRequest.getPropertyName())) {
Object columnObject = property.getColumnIterator().next();
if (columnObject instanceof Column) {
column = (Column) columnObject;
java.util.List<org.hibernate.mapping.Column> columns = property.getColumns();
if (!columns.isEmpty() && columns.get(0) instanceof Column) {
column = columns.get(0);
}
break;
}
}
if (column != null) {
fieldMetadata.setLength(column.getLength());
fieldMetadata.setLength(column.getLength() != null ? column.getLength().intValue() : null);
fieldMetadata.setScale(column.getScale());
fieldMetadata.setPrecision(column.getPrecision());
fieldMetadata.setRequired(!column.isNullable());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,10 @@
import org.broadleafcommerce.openadmin.server.dao.provider.metadata.request.OverrideViaXmlRequest;
import org.broadleafcommerce.openadmin.server.service.persistence.module.FieldManager;
import org.broadleafcommerce.openadmin.server.service.type.MetadataProviderResponse;
import org.hibernate.internal.TypeLocatorImpl;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.type.BasicType;
import org.hibernate.type.ManyToOneType;
import org.hibernate.type.Type;
import org.hibernate.type.TypeFactory;
import org.hibernate.type.TypeResolver;
import org.hibernate.type.spi.TypeConfiguration;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -125,21 +125,44 @@ public MetadataProviderResponse addMetadataFromFieldType(AddMetadataFromFieldTyp
//look for any map field metadata that was previously added for the requested field
for (Map.Entry<String, FieldMetadata> entry : addMetadataFromFieldTypeRequest.getPresentationAttributes().entrySet()) {
if (entry.getKey().startsWith(addMetadataFromFieldTypeRequest.getRequestedPropertyName() + FieldManager.MAPFIELDSEPARATOR)) {
TypeConfiguration typeConfiguration = new TypeConfiguration();
TypeFactory typeFactory = new TypeFactory(typeConfiguration);
TypeLocatorImpl typeLocator = new TypeLocatorImpl(new TypeResolver(typeConfiguration, typeFactory));
// Use the session-factory-bound TypeConfiguration so both basic and entity types can be resolved
SessionFactoryImplementor sfi = addMetadataFromFieldTypeRequest.getDynamicEntityDao()
.getStandardEntityManager().unwrap(SessionFactoryImplementor.class);
TypeConfiguration typeConfiguration = sfi.getTypeConfiguration();

Type myType = null;
//first, check if an explicit type was declared
String valueClass = ((BasicFieldMetadata) entry.getValue()).getMapFieldValueClass();
if (valueClass != null) {
myType = typeLocator.entity(valueClass);
// Try entity type resolution first via ManyToOneType (H6 equivalent of typeLocator.entity())
// ManyToOneType.getReturnedClass() returns the entity class, preserving old semantics
try {
sfi.getMappingMetamodel().getEntityDescriptor(valueClass);
// Entity exists - create ManyToOneType which returns the entity class from getReturnedClass()
myType = new ManyToOneType(typeConfiguration, valueClass);
} catch (Exception ex) {
// Not an entity - try as basic type
}
if (myType == null) {
try {
Class<?> valueJavaType = Class.forName(valueClass);
BasicType<?> resolved = typeConfiguration.getBasicTypeForJavaType(valueJavaType);
if (resolved != null) {
myType = resolved;
}
} catch (ClassNotFoundException ex) {
// Not a basic type either
}
}
}
if (myType == null) {
SupportedFieldType fieldType = ((BasicFieldMetadata) entry.getValue()).getExplicitFieldType();
Class<?> basicJavaType = getBasicJavaType(fieldType);
if (basicJavaType != null) {
myType = typeLocator.basic(basicJavaType);
BasicType<?> resolved = typeConfiguration.getBasicTypeForJavaType(basicJavaType);
if (resolved != null) {
myType = resolved;
}
}
}
if (myType == null) {
Expand All @@ -149,7 +172,19 @@ public MetadataProviderResponse addMetadataFromFieldType(AddMetadataFromFieldTyp
Class<?> clazz = (Class<?>) pType.getActualTypeArguments()[1];
Class<?>[] entities = addMetadataFromFieldTypeRequest.getDynamicEntityDao().getAllPolymorphicEntitiesFromCeiling(clazz);
if (!ArrayUtils.isEmpty(entities)) {
myType = typeLocator.entity(entities[entities.length-1]);
// Try entity type resolution for polymorphic entities via ManyToOneType
String entityName = entities[entities.length-1].getName();
try {
sfi.getMappingMetamodel().getEntityDescriptor(entityName);
// Entity exists - create ManyToOneType which returns the entity class from getReturnedClass()
myType = new ManyToOneType(typeConfiguration, entityName);
} catch (Exception ex) {
// Not an entity - try basic type
BasicType<?> resolved = typeConfiguration.getBasicTypeForJavaType(entities[entities.length-1]);
if (resolved != null) {
myType = resolved;
}
}
}
}
}
Comment thread
devin-ai-integration[bot] marked this conversation as resolved.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.broadleafcommerce.openadmin.server.security.remote.SecurityVerifier;
import org.broadleafcommerce.openadmin.server.security.service.RowLevelSecurityService;
import org.broadleafcommerce.openadmin.server.service.persistence.module.EmptyFilterValues;
import org.hibernate.type.SingleColumnType;
import org.hibernate.type.BasicType;
import org.springframework.stereotype.Service;

import java.io.Serializable;
Expand Down Expand Up @@ -133,7 +133,7 @@ public TypedQuery<Serializable> translateQuery(
if (idMetaData != null) {
Object idFldName = idMetaData.get("name");
Object type = idMetaData.get("type");
if ((idFldName instanceof String) && (type instanceof SingleColumnType)) {
if ((idFldName instanceof String) && (type instanceof BasicType)) {
criteria.orderBy(criteriaBuilder.asc(original.get((String) idFldName)));
}
}
Expand Down
Loading