Hibernate5 - невозможно получить определенное пользователем значение

Возникли проблемы при использовании hibernatetemplate.

Я обновляю свое устаревшее приложение со старой версии spring/hibernate/apache lucene до последней версии spring (4.x) / hibernate(5.x)

Мы используем hibernatetemplate для поиска продукта, продукт извлекается из базы данных, где в качестве одного из полей используется пользовательское сопоставление типов, которое не заполняется.

Это мой класс Java

@Indexed
public final class ProductImpl extends Primordial implements MutableProduct {
    @DocumentId
    private long id;
    @Field(index = Index.NO, store = Store.YES, bridge = @FieldBridge(impl = ToStringBridge.class))
    private Sku sku;

.....
}

Ниже мой hbm xml, в котором Sku не извлекается из таблицы. Я могу распечатать все другие значения.

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">
    <typedef name="productStatus" class="com.example.core.store.hibernate.orm.EnumUserType">
        <param name="enumClass">com.example.core.model.enums.ProductStatus</param>
    </typedef>

    <class name="com.example.core.model.type.product.ProductImpl" table="pct_product">
        <cache usage="transactional" />

        <id name="id" column="prd_id">
            <generator class="sequence" />
        </id>

        <property name="acccCheckedDate" column="prd_accc_checked_date" type="date" />
        <property name="supplierProductCode" column="prd_supplier_product_code" length="4000" />
        <property name="sku" column="prd_sku" not-null="true" unique="true" type="com.example.core.store.hibernate.orm.SkuUserType" length="100" />
        <property name="packageName" column="prd_package_name" not-null="true" length="4000" />
        <property name="packageDescription" column="prd_package_desc" length="4000" />


public final class SkuUserType {
private static final int[] SQL_TYPES = new int[]{VARCHAR};

public int[] sqlTypes() {
    return SQL_TYPES;
}

public Class returnedClass() {
    return Sku.class;
}

public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {
    String value = rs.getString(names[0]);
    checkNotEmpty(value);
    return sku(value);
}

public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {
    checkNotNull(value);
    int sku = toInt(value);
    st.setString(index, ""+sku);
}

private int toInt(Object value) {
    if (value instanceof Sku) return ((Sku) value).getValue();
    if (value instanceof String) return parseInt((String) value);
    if (value instanceof Integer) return (Integer) value;
    throw new IllegalStateException();
}

private Sku sku(String value) {
    int sku = parseInt(value);
    return new SkuImpl(sku);
}

}

0 ответов

Другие вопросы по тегам