1

トランザクション クラス (Spring アノテーション) で SQL クエリの結果を取得しようとしています。

String query = "SELECT DAT, DROP_RADIO FROM My_TABLE";
SQLQuery q = getCurrentSession().createSQLQuery(query);

q.setResultTransformer(Transformers.aliasToBean(CallDrop.class));
List result = q.list();

そして CallDrop:

public class CallDrop implements java.io.Serializable {

    private int id;
    private Date dat;
    private BigDecimal onRadio;
    public BigDecimal getOnRadio() {
        return onRadio;
    }
    public void setOnRadio(BigDecimal onRadio) {
        this.onRadio = onRadio;
    }
    public Date getDat() {
        return dat;
    }
    public void setDat(Date dat) {
        this.dat = dat;
    }
}

.hbm.xml は次のとおりです。

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.company.beans.CallDrop" table="My_TABLE">
        <id name="id" type="int" />

        <property name="dat" type="date">
            <column name="DAT" length="10" />
        </property>
        <property name="onRadio" type="big_decimal">
            <column name="DROP_RADIO" precision="22" scale="0" />
        </property>
</class>
</hibernate-mapping>

セッション ファクトリの applicationContext ファイルに hbm.xml を追加したことは確かです。

<bean id="sessionFactoryETL" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSourceETL"/></property>
        <property name="mappingResources">
        <list>
                    <value>com/company/beans/CallDrop.hbm.xml</value>
        </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>

だから、タイプはありませんが、動作しません。問題が何であるかを知っている体はありますか?ありがとう

4

2 に答える 2

3

addScalar(String columnAlias、Type type)を使用して、ネイティブSQLの列エイリアスを明示的に宣言できます。

getCurrentSession().createSQLQuery("select e.id AS id, e.first_name AS firstName, e.password AS password FROM table")
                .addScalar("id", StandardBasicTypes.INTEGER )
                .addScalar("firstName", StandardBasicTypes.STRING )
                .addScalar("password", StandardBasicTypes.STRING )
                .setResultTransformer(Transformers.aliasToBean(Employee.class))
                .list();
于 2012-10-05T10:06:36.723 に答える
1

クエリを次のように変更 "SELECT DAT as \"dat\", DROP_RADIO as \"onRadio\" FROM My_TABLE"

于 2012-05-08T10:38:34.200 に答える