2016-05-04 3 views
1

User.java:Нет Свойство Lastname не найдено для типа пользователя (JPA)

package com.hodor.booking.jpa.domain; 
import javax.persistence.Entity; 
import java.util.Date; 

@Entity 
public class User extends AbstractPersistable { 

    private String firstName; 

    private String lastName; 

    private String email; 

    private Date birthday; 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public String getEmail() { 
     return email; 
    } 

    public Date getBirthday() { 
     return birthday; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

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

    public void setBirthday(Date birthday) { 
     this.birthday = birthday; 
    } 
} 

UserRepository.java:

package com.hodor.booking.jpa.repository; 

import com.hodor.booking.jpa.domain.User; 
import org.springframework.data.jpa.repository.JpaRepository; 

/** 
* For Spring Data JPA query methods see: 
* http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods 
*/ 
public interface UserRepository extends JpaRepository<User, Long> { 

    public User findByEmail(String email); 
    public User findByLastname(String lastName); 
} 

UserService.java:

package com.hodor.booking.service; 

import com.hodor.booking.jpa.domain.User; 
import com.hodor.booking.jpa.repository.UserRepository; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 
import org.springframework.util.Assert; 

import java.util.List; 

@Service 
public class UserService { 

    @Autowired 
    private UserRepository userRepository; 

    public User saveUser(User user) { 
     Assert.notNull(user); 
     return userRepository.saveAndFlush(user); 
    } 

    public List<User> findAll() { 
     return userRepository.findAll(); 
    } 

    public User findOne(Long id) { 
     Assert.notNull(id); 
     return userRepository.findOne(id); 
    } 

    public User findByEmail(String email) { 
     Assert.hasLength(email); 
     return userRepository.findByEmail(email); 
    } 

    public User findByLastname(String lastName) { 
     Assert.hasLength(lastName); 
     return userRepository.findByLastname(lastName); 
    } 
} 

UserController:

package com.hodor.booking.controller; 

import com.hodor.booking.jpa.domain.User; 
import com.hodor.booking.service.UserService; 
import com.wordnik.swagger.annotations.Api; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RestController; 

import java.util.List; 

@RestController 
@RequestMapping("/api/v1/users") 
@Api(value = "users", description = "User resource endpoint") 
public class UserController { 

    private static final Logger log = LoggerFactory.getLogger(UserController.class); 

    @Autowired 
    private UserService userService; 

    @RequestMapping(method = RequestMethod.GET) 
    public List<User> index() { 
     log.debug("Getting all users"); 
     return userService.findAll(); 
    } 

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

    @RequestMapping(value = "/{lastName}", method = RequestMethod.GET) 
    public User get(@PathVariable("lastName") String lastName) { 
     return userService.findByLastname(lastName); 
    } 
} 

StackTrace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.hodor.booking.jpa.repository.UserRepository com.hodor.booking.service.UserService.userRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property lastname found for type User! 

Проблема:

Я добавил метод findByLastname и я не могу найти проблему (я новичок в этом).

+1

вы попробуйте аннотированные свой User Instance Поле с примечание JPA '@ Column'? –

+0

Спасибо .. где в коде я бы это сделал? – nottinhill

+0

В классе User ... аннотировать атрибуты экземпляра ... Пример: '@Column private String firstName;' –

ответ

2

Я никогда не использовал весну ... но чтение docs о org.springframework.data.jpa.repository.JpaRepository, я предлагаю переименовать метод: findByLastname как findByLastName в интерфейсе UserRepository ...

Кажется, это functionalty генерирует JPA запросов на чтение и разбор определенных методов в данном интерфейсе, который простирается от JpaRepository ... и говоря «findByLastname», Spring рассчитывает найти недвижимость на пользователе Сущности, как: lastname и не lastName

+0

Типично, как обычно. Спасибо друг. – nottinhill