Cassandra例外:在课程

时间:2017-02-11 17:29:27

标签: java spring servlets cassandra spring-data-cassandra

我是cassandra数据库的新手。我正在尝试将表映射到java类。

我的java课程:

@Table("user")
public class User implements Serializable 
{   
    @PrimaryKey
    @Column(value = "id")
    private int id;
    @Column(value = "first_name")
    private String firstName;

    //setters and getters
}
道上课:

 public class UserDaoImpl {

        Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
        Session session = cluster.connect("agtr_api");
        MappingManager manager = new MappingManager(session);
        Mapper<User> mapper = manager.mapper(User.class);
        public User getUserById(int id){    
             User u = mapper.get(id);
             return u;
        }     
    }

当我在服务器上运行我的应用程序时,它抛出以下异常:

  

SEVERE:servlet [spring]的Servlet.service()与路径的上下文   [/ aggregator-api]抛出异常[请求处理失败;嵌套   异常是java.lang.IllegalArgumentException:@Table注释是   没有在根本原因的com.data.User类上找到   java.lang.IllegalArgumentException:找不到@Table注释   class com.data.User at   com.datastax.driver.mapping.AnnotationChecks.getTypeAnnotation(AnnotationChecks.java:43)     在   com.datastax.driver.mapping.AnnotationParser.parseEntity(AnnotationParser.java:76)     在   com.datastax.driver.mapping.MappingManager.getMapper(MappingManager.java:226)     在   com.datastax.driver.mapping.MappingManager.mapper(MappingManager.java:182)     在com.etl.aapi.common.dao.UserDaoImpl。(UserDaoImpl.java:19)     在   com.etl.aapi.common.controller.UserController.a(UserController.java:13)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:498)at   org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)     在   org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)     在   org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)     在   org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)     在   org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)     在   org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)     在   org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)     在   org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)     在   org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)     在   org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:858)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:624)at   org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)     在javax.servlet.http.HttpServlet.service(HttpServlet.java:731)at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)     在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)     在   org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)     在   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)     在   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)     在   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)     在   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)     在   org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)     在   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)     在   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)     在   org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:958)     在   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)     在   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:452)     在   org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1087)     在   org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:637)     在   org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:318)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     在   org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)     在java.lang.Thread.run(Thread.java:745)

2 个答案:

答案 0 :(得分:0)

您也可以声明键空间名称。尝试使用如下完整语法:

@Table(keyspace = "yourKeyspace", name = "yourTable")

答案 1 :(得分:0)

“@Annotation”错误具有误导性,正如您正确猜测的那样,异常并没有直接说明实际错误是什么。潜在的问题始终存在于您的域/模型类字段/列定义中,例如列名丢失、不匹配等,请始终注意您的域/模型类。

此外,如果您使用 Achilles 库和 @Table 注释,您将不会得到正确的错误。作为一种解决方法,您还可以使用来自 DataStax 驱动程序的 @Table 注释,它会尝试在异常堆栈跟踪中向您抛出更多详细信息。