Hibernate 3 - 重用 IntegerType/StringType 等对象安全吗?

Hibernate 3 - safe to reuse IntegerType/StringType etc. objects?

我有一些 code/application 使用 Hibernate 3。

它调用如下:
query.setParameter("MRC", getPageName(), new StringType());
query.setParameter("MBID", getMBID(), new IntegerType());

我想用如下代码替换这些调用:
query.setParameter("MRC", getPageName(), STRING_TYPE);
query.setParameter("MBID", getMBID(), INTEGER_TYPE);

这样我就不必实例化这些对象 (第三个参数)每次。

此处STRING_TYPEINTEGER_TYPE将是静态私有class变量 类型分别为 StringTypeIntegerType

我想知道这样做是否安全(例如,从多线程的角度来看,或者纯粹 从对象重用的角度)。

我注意到在更高版本的 Hibernate 中他们强制使用 第二种编码方式,但我不确定遵循它是否安全 Hibernate 3 中也有这种较新的模式。

有什么想法吗?

StringType 有一个 INSTANCE-Field,其中包含一个您可以重复使用的实例。 Java 和 SQL 类型之间的 Type-类 映射并且没有状态,因此可以重用它们。

StringType 没有 成员字段,因此本身没有状态。在源代码中,所有操作要么直接对参数执行,要么处理单例对象。这意味着重用单例实例与每次创建新实例一样安全。但是,由于单例实例也是不可变对象(字符串常量 String.class 或静态最终整数),因此这两种变体都应该被认为是安全的。

这是源代码。

package org.hibernate.type;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import org.hibernate.dialect.Dialect;

/**
 * <tt>string</tt>: A type that maps an SQL VARCHAR to a Java String.
 * @author Gavin King
 */
public class StringType extends ImmutableType implements DiscriminatorType {

    public Object get(ResultSet rs, String name) throws SQLException {
        return rs.getString(name);
    }

    public Class getReturnedClass() {
        return String.class;
    }

    public void set(PreparedStatement st, Object value, int index) throws     SQLException {
        st.setString(index, (String) value);
    }

    public int sqlType() {
        return Types.VARCHAR;
    }

    public String getName() { return "string"; }

    public String objectToSQLString(Object value, Dialect dialect) throws Exception {
        return '\'' + (String) value + '\'';
    }

    public Object stringToObject(String xml) throws Exception {
        return xml;
    }

    public String toString(Object value) {
        return (String) value;
    }

    public Object fromStringValue(String xml) {
        return xml;
    }

}