2016-10-29 6 views
0

Im beginer im Frühjahr, HilfeDont erstellen UserRepository Bohne

@Entity 
@Table(name="users") 
public class User { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private long id; 
    private String username; 
    private String password; 

    @ManyToMany 
    @JoinTable(name = "users_roles", 
      joinColumns = {@JoinColumn(name = "user_id")}, 
      inverseJoinColumns = @JoinColumn(name = "role_id")) 
    private Set<Role> roles; 

    public Set<Role> getRoles() { 
     return roles; 
    } 

    public void setRoles(Set<Role> roles) { 
     this.roles = roles; 
    } 

    public String getPassword() { 
     return password; 
    } 

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

    public long getId() { 
     return id; 
    } 

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

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    protected User(){} 
    public User(String name, String pass) { 
     username = name; 
     password = pass; 
    } 

} 

Repository

Entity bitte:

public interface UserRepository extends JpaRepository<User, Long> { 
    User findByUsername(String username); 
} 

Controller:

@RestController 
    @RequestMapping("/users") 
    @PreAuthorize("hasRole('ADMIN')") 
    public class UserController { 
     @Autowired 
     UserRepository userRepository; 

     @RequestMapping(method = RequestMethod.GET) 
     public List<User> getUsers() 
     { 
      List<User> result = new ArrayList<User>(); 
      userRepository.findAll().forEach(result::add); 
      return result; 
     } 

     @RequestMapping(method = RequestMethod.POST) 
     public User addUser(String username, String password, String password_confirm) 
     { 
      if (username.isEmpty() || password.isEmpty() || password_confirm.isEmpty()) 
       return null; 
      if (!password.equals(password_confirm)) 
       return null; 
      return userRepository.save(new User(username, password)); 
     } 

     @RequestMapping(value = "/add",method = RequestMethod.GET) 
     public ModelAndView getUserForm() 
     { 
      return new ModelAndView("add"); 
     } 

     @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) 
     public void delete(@PathVariable("id") Long id) 
     { 
      userRepository.delete(id); 
     } 

     @RequestMapping(value = "/{id}", method = RequestMethod.GET) 
     public User getUser(@PathVariable("id") Long id) 
     { 
      return userRepository.findOne(id); 
     } 
    } 

Daten Config:

@Configuration 
@EnableTransactionManagement 
@PropertySource(value = {"classpath:hibernate.properties"}) 
@EnableJpaRepositories("com.sergey.repository") 
public class DataConfig { 
    @Autowired 
    private Environment environment; 

    @Bean 
    public DataSource dataSource() { 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName")); 
     dataSource.setUrl(environment.getRequiredProperty("jdbc.url")); 


    dataSource.setUsername(environment.getRequiredProperty("jdbc.username")); 
      dataSource.setPassword(environment.getRequiredProperty("jdbc.password")); 
      return dataSource; 
     } 

    @Bean 
    public LocalSessionFactoryBean sessionFactory() { 
     LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
     sessionFactory.setDataSource(dataSource()); 
     sessionFactory.setPackagesToScan("com.sergey.entity"); 
     sessionFactory.setHibernateProperties(hibernateProperties()); 

     return sessionFactory; 
    } 

    private Properties hibernateProperties() { 
     Properties properties = new Properties(); 
     properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); 
     properties.put("show_sql", environment.getRequiredProperty("hibernate.show_sql")); 
     properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("hibernate.hbm2ddl.auto")); 
     return properties; 
    } 

    @Bean 
    @Autowired 
    public HibernateTransactionManager transactionManager(SessionFactory s) { 
     HibernateTransactionManager txManager = new HibernateTransactionManager(); 
     txManager.setSessionFactory(s); 
     return txManager; 
    } 

    @Bean 
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { 
     return new PersistenceExceptionTranslationPostProcessor(); 
    } 


    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean(); 
     emfb.setDataSource(dataSource()); 
     emfb.setPackagesToScan("com.sergey.entity"); 
     emfb.setJpaVendorAdapter(jpaVendorAdapter()); 
     emfb.setJpaProperties(hibernateProperties()); 
     return emfb; 
    } 

    @Bean 
    public JpaVendorAdapter jpaVendorAdapter() { 
     return new HibernateJpaVendorAdapter(); 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(emf); 
     return transactionManager; 
    } 

} 

pom.xml

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>springSecure</groupId> 
    <artifactId>springSecure</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

    <properties> 
     <spring.version>4.3.2.RELEASE</spring.version> 
     <spring.security.version>4.0.4.RELEASE</spring.security.version> 
     <hibernate-version>5.0.11.Final</hibernate-version> 
     <jdk.version>1.8</jdk.version> 
    </properties> 

    <dependencies> 
     <!--Spring Framework--> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <!--Spring Security--> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-core</artifactId> 
      <version>${spring.security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-web</artifactId> 
      <version>${spring.security.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.security</groupId> 
      <artifactId>spring-security-config</artifactId> 
      <version>${spring.security.version}</version> 
     </dependency> 
     <!--Spring DB--> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa 

--> org.springframework.data spring-data-jpa 1.10.2.RELEASE org.springframework.data spring-data-commons-core 1.4.0.RELEASE org.hibernate hibernate-core ${hibernate-version} jstl jstl 1.2 javax.servlet javax.servlet-api 3.0.1 provided com.fasterxml.jackson.core jackson-annotations 2.8.1 org.postgresql postgresql 9.4.1211.jre7

</dependencies> 

</project> 

Fehler:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [com/sergey/config/DataConfig.class]: Ambiguous factory method matches found in bean 'transactionManager' (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities): [public org.springframework.transaction.PlatformTransactionManager com.sergey.config.DataConfig.transactionManager(javax.persistence.EntityManagerFactory), public org.springframework.orm.hibernate5.HibernateTransactionManager com.sergey.config.DataConfig.transactionManager(org.hibernate.SessionFactory)] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:561) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:776) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5116) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5634) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652) at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1863) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618) at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source) at javax.management.remote.rmi.RMIConnectionImpl.doOperation(Unknown Source) at javax.management.remote.rmi.RMIConnectionImpl.access$300(Unknown Source) at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(Unknown Source) at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(Unknown Source) at javax.management.remote.rmi.RMIConnectionImpl.invoke(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source) at sun.rmi.transport.Transport$1.run(Unknown Source) at sun.rmi.transport.Transport$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Unknown Source) at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

окт 29, 2016 3:33:04 PM org.apache.catalina.core.ApplicationContext log

+0

es ist wirklich offensichtlich, wenn Sie einen Stacktrace überprüfen und Code Sie haben –

+0

angegeben wo ist der Fehler? – apayvl

+0

Sie haben bereits eine Antwort unter –

Antwort

1

Frühling Repositorys zur Laufzeit durch Rahmen Frühlings-PPV umgesetzt und @NoRepositoryBean sollten nur für die BaseRepositories gekennzeichnet sein, die verwendet werden, Bereitstellen eines Standardverhaltens für alle Unterschnittstellen (falls vorhanden).

Die Ausnahme, sagt, dass „Keine Warte Bean vom Typ [com.sergey.repository.UserRepository]“ für die Abhängigkeit gefunden, ist dies, weil Frühling Behälter nicht die Umsetzung vorsah, wie es mit @NoRepositoryBean

Mit anderen Worten markiert, Sie @NoRepositoryBean Anmerkung nicht hinzufügen sollten zu der UserRepository, da es eine konkrete Repository-Schnittstelle ist, die von Spring-JPA-Framework (zur Laufzeit) implementiert werden muss. So entfernen Sie die Annotation an der Spitze und dann UserRepository Klasse wird wie folgt dar:

public interface UserRepository extends JpaRepository<User, Long> { 
    User findByUsername(String username); 
} 

Bitte beachten Sie die unten Dokumentation für weitere Details:

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/

+0

gelöscht, aber der Fehler bleibt – apayvl

+0

gelöscht und den Server/Container neu gestartet? – developer

+0

ja, Projekt säubern und Server neu starten – apayvl

Verwandte Themen