2017-10-18 71 views
1

我有一個簡單的項目,下面定義的類。在spring-boot 1.5.4,spring-data-commons 1.13和spring-data-jpa 1.11中,它工作得很好。從Spring Data 1.11升級到Spring Data 2.0會導致「找不到屬性類型爲SimpleEntity的屬性!」

當我升級到spring-boot 2.0.0.M5,spring-data-commons 2.0.0和spring-data-jpa-2.0.0時,我在啓動時收到一個PropertyReferenceException,其中顯示「找不到屬性刪除鍵入SimpleEntity!「不幸的是,我無法獲得堆棧跟蹤 計算機我得到的錯誤,它是非常鎖定的安全。

任何想法?我發現的其他帖子似乎不符合我的情況。

這裏是類(改變了名字,但你的想法):

package entity; 

@MappedSuperclass 
public abstract class BaseEntity implements Serializable { 
.... 
} 

package entity; 

@Entity 
@Table(schema = "ENTITIES", name = "SIMPLE") 
public class SimpleEntity extends BaseEntity { 
    @Column(name = "ID") 
    private Long id; 

    @Column(name = "CODE") 
    private String code; 

    @Column(name = "NAME") 
    private String name; 

    ... getters and setters ... 
} 

package repository; 
imoport org.springframework.data.repository.Repository 

public interface SimpleRepository extends Repository<SimpleEntity, Long> { 
    public SimpleEntity save(SimpleEntity entity); 
    public List<SimpleEntity> save(List<SimpleEntity> entities); 
    public void delete(Long id); 
    public SimpleEntity findOne(Long id); 
    public List<SimpleEntity> findAllByOrderByNameAsc(); 
    public List<SimpleEntity> findByCode(String code); 
    public List<SimpleEntity> findByNameIgnoreCaseOrderByNameAsc(String name); 
} 

回答

1

原來有在Spring 2.0的數據接口CrudRepository重大更改。

  1. 你有一個1.x的自旋微觀數據項目
  2. 你有一些直接擴展庫的接口,不喜歡CrudRepository子接口
  3. 你的版本庫子接口聲明:我收到此錯誤在下列情況下發生「無效刪除(ID)」,在CrudRepository發現方法(在我的情況下「刪除無效(龍)」
  4. 您更新到春天數據2.X

的問題是,在CrudRepository 2.X不使用L onger有一個「void delete(ID)」方法,它被刪除,並添加了一個新的方法「void deleteById(ID)」。

當Spring數據看到一個它不能識別的刪除方法簽名時,它會產生一個有關您的實體類缺少刪除屬性的錯誤 - 1.2和2.x都是如此。

+0

我面臨同樣的問題,並沒有發現這種情況下的任何文件。 – nivash

+0

我不希望這裏有任何文檔。請參閱上面的第2點:我選擇使用Repository - 一個空的界面 - 在這裏我們正確地定義了CrudRepository的一些子集的方法。如果我走這條路線,並聲明一個無法識別簽名的方法,那就是我的問題:)這只是意味着在升級時我必須意識到這一點。 Spring可以做得更好的唯一的事情是提供一個錯誤消息,其中聲明瞭一個無法識別的方法簽名,其中包含該特定版本的Spring Data的Repository接口的JavaDocs的URL。 – Greg

相關問題