Hibernate命名查询ClassCastException

时间:2018-03-16 11:47:37

标签: java hibernate classcastexception named-query

这可能与this重复,但在那里没有得到适当的解决方案。 我使用命名查询来获取如下的一些细节并返回字符串的列表,

<sql-query name="getContactIds">
    <return-scalar column="id" type="string" />
        <![CDATA[Select c.id as id from CRM.dbo.contact c where is_deleted=0]]>
</sql-query> 

但是在调用此查询时,我收到java.lang.RuntimeException:java.lang.ClassCastException: java.lang.String无法强制转换为java.util.Map

SearchTemplate searchTemplate = new SearchTemplate();
searchTemplate.setNamedQuery("getContactIds");
searchTemplate.setNamedQueryResultType(String.class);
salesforceContactIds=contactDao.getSfContactIds(searchTemplate);

感谢这方面的任何帮助。

1 个答案:

答案 0 :(得分:2)

JPQL是Hibernate / JPA的查询语言。它适用于实体而不是表格。因此,如果您有联系 java实体,其字段已删除,并且已映射到联系人表

@Entity
@Table(name = "CONTACT", schema = "name")
public class Contact {

    @Id
    private Integer id;

    @Column(name = "is_deleted", nullable = false)
    private boolean deleted;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public boolean isDeleted() {
        return deleted;
    }

    public void setDeleted(boolean deleted) {
        this.deleted = deleted;
    }

然后选择应该像

select * from Contact c where c.deleted = 0

然后从联系获取ID或其他必填字段。

如果要使用SQL语法,则需要使用NamedNativeQuery