我不明白为什么存储库在一个案例中查询但在另一个案例中没有查询

时间:2017-04-21 16:47:19

标签: java android spring-boot spring-data-jpa spring-websocket

我有一些基于spring-boot的简单STOMP WebSocket和来自DB的data-jpa。

我的控制器中的查询工作正常,如果它是来自JS(SockJS)的查询并且如果从Android(com.github.NaikSoftware:StompProtocolAndroid)进行查询而无法工作(只返回空列表)但是来自超类的方法在这两种情况下,CrudRepository(如findAll())都可以工作。

控制器

@Controller
public class MainController {

  @Autowired
  private MemberDAO memberDAO;

      @MessageMapping("/getMembers")
      @SendToUser("/topic/greetings")
      public SocketResponse getMembers(String email){
        System.out.println("email "+memberDAO.findByEmail(email));//Works if it is query from JS (SockJS) and doesn't work (just return rmpty list) if doing query from Android (com.github.NaikSoftware:StompProtocolAndroid) 
        System.out.println("listMembert "+memberDAO.findAll());//Both cases work fine and return list of members 
        //.....
      }
}

DAO

public interface MemberDAO extends CrudRepository<Member, Long> {
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED)
    //@Query(" from Member m where m.email = ?1")
    List<Member> findByEmail(String email);

}

应用

@SpringBootApplication
@Import({ WebSocketConfig.class })
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

代码不完整,没有spring boot stomp配置,您没有指定持久化对象响应的方式。

我正在通过WebSocket客户端进行Android编程。我建议您检查接收的客户端以及如何将有效负载字符串转换为对象。

我的项目仍在进行中,但我希望它可能会有用。

这个问题很旧,但是我希望我的回答可以帮助谁使用WebSocket。