0

I have following model class:

@Entity
@Table(name="user_content")
@org.hibernate.annotations.NamedQueries({
        @org.hibernate.annotations.NamedQuery(
                name = "checkThatImagesAreModerated",
                query = "select contentId from UserContent where contentId in(:imageIdList) and moderationStatus!='TRUE'"
        )

})
public class UserContent {
...

and following dao:

Session session = sessionFactory.getCurrentSession();
    Query query = session.getNamedQuery("checkThatImagesAreModerated");
    query.setParameter("imageIdList", imageIds );
    return query.list();

Result of last row execution looks like this:

java.lang.ClassCastException: [Ljava.lang.Long; cannot be cast to java.lang.Long
    at org.hibernate.type.LongType.set(LongType.java:42)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
    at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:116)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:38)
    at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:491)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1563)
    at org.hibernate.loader.Loader.doQuery(Loader.java:673)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2213)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at com.terminal.dao.impl.ContentDaoImpl.checkThatImagesAreModerated(ContentDaoImpl.java:105)
    at com.terminal.service.impl.ContentServiceImpl.checkThatImagesAreModerated(ContentServiceImpl.java:187)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
.....

hibernate log:

Hibernate: 


 select
        userconten0_.content_id as col_0_0_ 
    from
        user_content userconten0_ 
    where
        (
            userconten0_.content_id in (
                ?
            )
        ) 
        and userconten0_.moderation_status<>'TRUE'

I don't inderstand where and why hibernate tryes to convert Long[] to Long

P.S.

enter image description here

3
  • What is the type of imageIds? Commented Jan 17, 2015 at 18:17
  • It should be a Collection<Long>, AFAIK. And it should be in :imageIdList, not in (:imageIdList) Commented Jan 17, 2015 at 18:23
  • As Chris Fei answered also I should to use setParameterList method Commented Jan 17, 2015 at 19:51

2 Answers 2

4

Try doing query.setParameterList("imageIdList", imageIds); instead of query.setParameter("imageIdList", imageIds);. When binding parameters for an in clause, you typically need to use that instead. Check out the docs for Query.java

Sign up to request clarification or add additional context in comments.

1 Comment

query.setParameterList("imageIdList", Arrays.asList(imageIds) );
0

Use the query.uniqueResult(), the list method returns a list of results, even if there is only one. Internal mapping might resolve it to an array

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.