使用hbm.xml在Postgresql和Hibernate 6中存储Java枚举

dba5bblo  于 2023-02-09  发布在  PostgreSQL
关注(0)|答案(1)|浏览(133)

我不知道如何使用Postgresql Enum类型和Hibernate 6以及遗留的hbm.xml来存储Java Enum。
在Hibernate 5中,我曾经使用hiberate-types项目和以下XML:

<property name="type" column="Type" access="field">
        <type name="com.vladmihalcea.hibernate.type.basic.PostgreSQLEnumType">
            <param name="enumClass">"my-java-enum-type"</param>
            <param name="useNamed">true</param>
        </type>
    </property>

但是,这不再适用于Hibernate 6。包的作者提供了一个文档,说明如何将其与注解一起使用,但目前我们还无法切换到注解(https://vladmihalcea.com/the-best-way-to-map-an-enum-type-with-jpa-and-hibernate/)。
如果有人能给予点提示我会很高兴的。

umuewwlo

umuewwlo1#

我通过编写自己的类型解决了这个问题:

public class PersistentEnum<T extends Enum<T>> extends EnumType<T>
{
    @Override
    public  void
            nullSafeSet(PreparedStatement preparedStatement, T obj, int index, SharedSessionContractImplementor session)    throws HibernateException,
                                                                                                                            SQLException
    {
        if(obj == null)
        {
            preparedStatement.setNull(index, java.sql.Types.OTHER);
        }
        else
        {
            preparedStatement.setObject(index, obj.toString(), java.sql.Types.OTHER);
        }

    }
}

有了这个,以前发布的hbm.xml代码就可以工作了。

相关问题