2015-04-17 44 views
3

我试图用mongodb创建一个spring引导应用程序。这是实体的样子。

import java.time.LocalDateTime; 

import javax.validation.constraints.NotNull; 
import javax.validation.constraints.Pattern; 
import javax.validation.constraints.Size; 


import org.hibernate.validator.constraints.NotEmpty; 
import org.springframework.data.annotation.Id; 
import org.springframework.data.mongodb.core.index.Indexed; 
import org.springframework.data.mongodb.core.mapping.Document; 


@Document 
public class User { 

@Id 
private String id; 

@Size(min = 1, max = 128) 
@Pattern(regexp = "[A-Za-z. ]*", message = "First name must contain valid character") 
@NotNull(message = "First name can not be null") 
@NotEmpty(message = "First name can not be empty") 
private String firstname; 

@Size(min = 1, max = 128) 
@Pattern(regexp = "[A-Za-z. ]*", message = "Last name must contain valid character") 
@NotNull(message = "Last name can not be null") 
@NotEmpty(message = "Last name can not be empty") 
private String lastname; 

@NotNull 
@NotEmpty 
@Size(min = 6, max = 32, message = "Password must be six character long") 
private String password; 



@Indexed(unique = true) 

private String email; 


private LocalDateTime loginDate; 


public LocalDateTime getLoginDate() { 
    return loginDate; 
} 

public void setLoginDate(LocalDateTime loginDate) { 
    this.loginDate = loginDate; 
} 

public String getId() { 
    return id; 
} 

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




public String getFirstname() { 
    return firstname; 
} 

public void setFirstname(String firstname) { 
    this.firstname = firstname; 
} 

public String getLastname() { 
    return lastname; 
} 

public void setLastname(String lastname) { 
    this.lastname = lastname; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 


public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email.toLowerCase(); 
} 



} 

以下是负责依赖关系的部分pom.xml。

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.2.3.RELEASE</version> 
</parent> 





<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 



<dependencies> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
     <exclusions> 
      <exclusion> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-webmvc</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-mongodb</artifactId> 
    </dependency> 


    <dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>3.0.0-beta3</version> 
    </dependency> 


    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <exclusions> 
     <exclusion> 
      <artifactId>mongo-java-driver</artifactId> 
      <groupId>org.mongodb</groupId> 
     </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>javax.validation</groupId> 
     <artifactId>validation-api</artifactId> 
     <version>1.1.0.Final</version> 
    </dependency> 


    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
    </dependency> 


    <dependency> 
     <groupId>javax.inject</groupId> 
     <artifactId>javax.inject</artifactId> 
     <version>1</version> 
    </dependency> 

的问题是,我可以在收藏接入用户,如果尝试添加如预期它会抛出错误重复的电子邮件。 但是,当我尝试列出集合时,我得到重复键错误。

List<User> users = MongoTemplate.getMongoOperations().find(query, User.class); 

这里是异常日志,

java.lang.ClassNotFoundException: com.mongodb.MongoException$DuplicateKey 
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) ~[na:1.8.0_31] 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) ~[na:1.8.0_31] 
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_31] 
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) ~[na:1.8.0_31] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_31] 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_31] 
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:54) ~[spring-data-mongodb-1.6.2.RELEASE.jar:na] 
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1940) ~[spring-data-mongodb-1.6.2.RELEASE.jar:na] 
at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1823) ~[spring-data-mongodb-1.6.2.RELEASE.jar:na] 
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1633) ~[spring-data-mongodb-1.6.2.RELEASE.jar:na] 
at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1616) ~[spring-data-mongodb-1.6.2.RELEASE.jar:na] 
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:535) ~[spring-data-mongodb-1.6.2.RELEASE.jar:na] 
at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:526) ~[spring-data-mongodb-1.6.2.RELEASE.jar:na] 

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_31] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_31] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_31] 
at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_31] 
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:172) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:384) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:342) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:271) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[jersey-common-2.14.jar:na] 
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[jersey-common-2.14.jar:na] 
at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.14.jar:na] 
at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[jersey-common-2.14.jar:na] 
at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[jersey-common-2.14.jar:na] 
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297) ~[jersey-common-2.14.jar:na] 
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030) ~[jersey-server-2.14.jar:na] 
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377) ~[jersey-container-servlet-core-2.14.jar:na] 
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381) ~[jersey-container-servlet-core-2.14.jar:na] 
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344) ~[jersey-container-servlet-core-2.14.jar:na] 
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221) ~[jersey-container-servlet-core-2.14.jar:na] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) ~[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85) ~[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-4.1.6.RELEASE.jar:4.1.6.RELEASE] 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) ~[tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:516) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1086) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:659) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1558) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1515) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_31] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_31] 
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.20.jar:8.0.20] 
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_31] 

任何人可以帮助吗?

更新: Java 8 LocalDateTime正在产生问题。在我的回答中发布了以下解决方案

回答

0

编辑:

里程碑版本解决了这个问题。

<parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.3.0.M1</version> 
    </parent> 

清理我的pom.xml解决这个问题对我来说。 删除 - >

<dependency> 
<groupId>org.springframework.data</groupId> 
<artifactId>spring-data-mongodb</artifactId> 
<exclusions> 
<exclusion> 
    <artifactId>mongo-java-driver</artifactId> 
    <groupId>org.mongodb</groupId> 
</exclusion> 
</exclusions> 
</dependency> 

和其他不必要的依赖
的pom.xml清理后 - >

 <pluginRepositories> 
    <pluginRepository> 
    <id>spring-snapshots</id> 
    <url>http://repo.spring.io/snapshot</url> 
    </pluginRepository> 
<pluginRepository> 
    <id>spring-milestones</id> 
    <url>http://repo.spring.io/milestone</url> 
    </pluginRepository> 
</pluginRepositories> 


    <repositories> 
    <repository> 
     <id>miredot</id> 
     <name>MireDot Releases</name> 
     <url>http://nexus.qmino.com/content/repositories/miredot</url> 
    </repository> 


    <repository> 
     <id>spring-releases</id> 
     <name>Spring Releases</name> 
     <url>https://repo.spring.io/libs-release</url> 
    </repository> 


    <repository> 
    <id>spring-snapshots</id> 
    <name>Spring Snapshots</name> 
    <url>http://repo.spring.io/snapshot</url> 
    <snapshots> 
     <enabled>true</enabled> 
    </snapshots> 
</repository> 
</repositories> 


<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
<version>1.3.0.BUILD-SNAPSHOT</version> 
</parent> 


    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-jersey</artifactId> 
     </dependency> 

    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-mongodb</artifactId> 
     </dependency> 



    <dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>3.0.0</version> 

    </dependency> 
相关问题