2017-03-09 24 views
3

我使用Spring Data Jpa,並在部署項目時面臨異常 我在service和serviceImpl類中使用了findAll()方法,並且收到一個異常,這是我的源:例外:沒有找到屬性刪除類型void在Spring數據JPA

型號:

@Entity 
@Table(name="CITY") 
public class City { 

    @Id 
    @Column(name="ID", nullable = false, unique = true) 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private int id; 

    @Column(name = "NAME") 
    private String name; 
    // get, set method  
} 

庫類:

public interface CityJpaRepositoryCustom extends JpaRepository<City, Integer> { 
} 

服務類:

public interface CityService { 
    public List<City> findAll(); 
} 

ServiceImpl類:

@Service 
public class CityServiceImpl implements CityService { 

@Resource 
private CityJpaRepositoryCustom cityRepository; 

@Override 
@Transactional 
public List<City> findAll() {  
    // TODO Auto-generated method stub  
    return cityRepository.findAll();   
} 
} 

Controller類:

@Controller 
public class CityController { 

@Autowired 
private CityService cityService;  

@RequestMapping(value="/list", method=RequestMethod.GET) 
public ModelAndView getListCity(HttpServletRequest request, 
              HttpServletResponse response, 
              ModelMap model) {  
    ModelAndView mav = new ModelAndView("manageCity"); 

    List<City> cityList = cityService.findAll(); 
    mav.addObject("cityList", cityList); 

    return mav; 
} 

的pom.xml:

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.0.1.RELEASE</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-data-jpa</artifactId> 
     <exclusions> 
      <exclusion> 
       <artifactId>hibernate-entitymanager</artifactId> 
       <groupId>org.hibernate</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 

    <!-- SOLR --> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-solr</artifactId> 
     <version>${spring-data-solr.verion}</version> 
    </dependency> 

    <!-- JSON --> 
    <dependency> 
     <groupId>org.codehaus.jackson</groupId> 
     <artifactId>jackson-mapper-asl</artifactId> 
     <version>1.9.11</version> 
    </dependency> 

    <!-- WEB --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
    </dependency> 

    <!-- Hibernate 4 dependencies --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>${hibernate.version}</version> 
    </dependency> 

</dependencies> 

日誌信息:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cityJpaRepositoryCustom': Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property delete found for type void! 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 

我已經找到了一些相同的主題,但它沒有得到好的結果對我來說,如何解決這個異常?非常感謝!

+0

我沒有得到與所提供的代碼的任何錯誤。你在CityJpaRepositoryCustom中定義了一個自定義的'delete'方法嗎? – manish

+0

嗨@manish:我沒有定義delete方法,只是存在一個fillAll(),我不知道爲什麼,也許這是由於配置 –

回答

1

將您的Spring Boot版本升級到最新版本(1.5.1.RELEASE)。

您使用的是一個古老的版本,該版本反過來將拉動舊版本的Spring Data,這可能不支持刪除。

+1

導致更新最新版本,我不得不花費很多時間來重新編碼但是,它工作,謝謝保羅 –

0

如果你想使用刪除操作,但不想更新Spring Data JPA,你必須編寫自己的刪除實現。例如:

public interface CityJpaRepositoryCustom extends JpaRepository<City, Integer> { 
    @Modifying 
    @Query("delete from City where name = :name") 
    void deleteByName(@Param("name") String name); 
} 

相關文檔:

  1. Using @Query註釋
  2. @Modifying註釋
  3. @Param註釋
相關問題