我有一些使用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_TYPE
和INTEGER_TYPE
将是静态私有类变量
类型分别为StringType
和IntegerType
。
我想知道这样做是否安全(例如,从多线程角度来看,还是纯粹从 从对象重用的角度来看)。
我注意到,在更高版本的Hibernate中,他们使用 第二种编码方式,但是我不确定遵循这种方式是否安全 Hibernate 3中也有这种新模式。
有什么想法吗?
答案 0 :(得分:2)
StringType有一个INSTANCE-Field,其中包含可以重用的实例。类型类在Java和SQL类型之间映射,并且没有状态,因此可以重用它们。
答案 1 :(得分:1)
StringType具有
这是源代码。
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;
}
}