簡體   English   中英

Hibernate 3 - 可以安全地重用IntegerType / StringType等對象嗎?

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

我有一些使用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);

這樣我每次都不必實例化這些對象(第3個參數)。

這里STRING_TYPEINTEGER_TYPE將類型的靜態專用類變量StringTypeIntegerType分別。

我想知道這樣做是否安全(例如從多線程角度,或純粹從對象重用角度)。

我注意到在后來的Hibernate版本中他們使用了第二種編碼方式,但我不確定在Hibernate 3中是否也可以安全地使用這種新模式。

有任何想法嗎?

StringType有一個INSTANCE-Field,它包含一個可以重用的實例。 Type-Classes在Java和SQL-Types之間映射並且沒有狀態,因此可以重用它們。

StringType具有<edited> no </ edited>成員字段,因此沒有狀態本身。 在源代碼中,所有操作都可以直接在參數上執行,也可以處理單例對象。 這意味着重用單例實例與每次創建新實例一樣安全。 但是,由於單例實例也是不可變對象(字符串常量,String.class或靜態最終int),因此應將這兩種變體視為安全。

這是源代碼。

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;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM