2016-05-10 42 views
1

hibernateを使用して、指定されたユーザー名の友人のリストにアクセスしようとしています。ここでは、fetchListOfFriends関数を使用してジェネリックリストをFriendsDetailsのタイプのArraylistに変換するためのServiceクラスがあります。java.lang.ClassCastException:java.lang.Stringは[Ljava.lang.Object;にキャストできません。

@Service 
@Transactional 
public class DetailsServiceImpl implements DetailsService { 
@Autowired 
private DetailsDao detailsDao; 
@Override 
public List<FriendsDetails> fetchListOfFriends(String name) { 

    @SuppressWarnings("rawtypes") 
    List listOfFriends=detailsDao.fetchListOfFriends(name); 
    List<FriendsDetails> friendList= fetchListOfFriendss(listOfFriends); 
    if(listOfFriends==null){ 
     System.out.println("Empty and null list"); 

    } 
    System.out.println("size of friendList" + listOfFriends.size()); 
    return friendList; 
} 
private List<FriendsDetails> fetchListOfFriendss(@SuppressWarnings("rawtypes") List genericList) { 

    @SuppressWarnings("unchecked") 
    List<Object> result = (List<Object>) genericList; 
    Iterator<Object> itr = result.iterator(); 
    List<FriendsDetails> listOfFriend= new ArrayList<FriendsDetails>(); 
    while(itr.hasNext()){ 
     Object[] obj = (Object[]) itr.next(); 
     System.out.println(obj.toString()); 
     String userName = String.valueOf(obj[0]); 

     FriendsDetails obj1= new FriendsDetails(); 
     obj1.setFriendName(userName); 

     listOfFriend.add(obj1); 
    } 
    return listOfFriend; 
} 

DetailsDaoImpl.java

@Autowired 
private SessionFactory sessionFactory; 
@SuppressWarnings("rawtypes") 
@Override 

public List fetchListOfFriends(String name) { 
    Session session=sessionFactory.getCurrentSession(); 
    String qureyToFetchFriends="Select name,presenceStatus from UserPresence where name in (Select friendName from Friends where name='"+name+"')"; 
    List listOfFriends=session.createSQLQuery(qureyToFetchFriends).list(); 
    return listOfFriends; 
} 

Logs.txt

May 22, 2016 1:24:11 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [springmvc] in context with path  [/Testing] threw exception [Request processing failed; nested exception is  java.lang.ClassCastException: java.lang.String cannot be cast to  [Ljava.lang.Object;] with root cause 
java.lang.ClassCastException: java.lang.String cannot be cast to [Ljava.lang.Object; 
at com.tcs.Service.FriendServiceImpl.searchFriend(FriendServiceImpl.java:61) 
at com.tcs.Service.FriendServiceImpl.searchFriend(FriendServiceImpl.java:32) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
+0

コンソールで 'System.out.println(obj.toString());'という行はどうなりますか? –

+1

どのメソッドが例外をスローしていますか、どの行がClassCastExceptionを引き起こしていますか? – alexanderific

+0

@chsdkいいえ、何も印刷できません..新しいリスト 'listOfFriend'を作成するまではコードが実行中ですwhileループに何らかのエラーがあります... –

答えて

0

すべてが正常に動作するはずです。

List listOfFriendsは、ではなく、List<String>です。それはSelect name,presenceStatus from UserPresenceList<Object[]>を返すべきであるので、奇妙です。

おそらく、春は@Autowired private DetailsDao detailsDao;の不正な実装を設定します。

このコードを試してください。これは動作するはずですList<String>

private List<FriendsDetails> fetchListOfFriendss(List<?> genericList) { 
      Iterator<?> itr = genericList.iterator(); 
      List<FriendsDetails> listOfFriend = new ArrayList<FriendsDetails>(); 

      while (itr.hasNext()) { 
       Object obj = itr.next(); 
       String userName = String.valueOf(obj); 
       System.out.println(userName); 

       FriendsDetails obj1 = new FriendsDetails(); 
       obj1.setFriendName(userName); 

       listOfFriend.add(obj1); 
      } 
      return listOfFriend; 
} 
関連する問題