【问题标题】:Upgrading from Spring Data 1.11 to Spring Data 2.0 results in "No property delete found for type SimpleEntity!"从 Spring Data 1.11 升级到 Spring Data 2.0 会导致“No property delete found for type SimpleEntity!”
【发布时间】:2017-10-19 05:40:18
【问题描述】:

我有一个简单的项目,其中定义了以下类。它在 spring-boot 1.5.4、spring-data-commons 1.13 和 spring-data-jpa 1.11 中运行良好。

当我升级到 spring-boot 2.0.0.M5、spring-data-commons 2.0.0 和 spring-data-jpa-2.0.0 时,我在启动时收到一个 PropertyReferenceException,上面写着“没有找到类型的属性删除简单实体!”不幸的是,我无法得到堆栈跟踪 我收到错误的计算机,为了安全起见,它已被锁定。

有什么想法吗?我发现的其他帖子似乎与我的情况不符。

这是类(更改了名称,但你明白了):

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);
}

【问题讨论】:

    标签: spring-data spring-data-jpa


    【解决方案1】:

    事实证明 Spring Data 2.0 CrudRepository 接口发生了重大变化。我收到的错误发生在以下情况:

    1. 您有一个 1.x Sping Data 项目
    2. 你有一个直接扩展 Repository 的接口,而不是像 CrudRepository 这样的子接口
    3. 您的 Repository 子接口声明了在 CrudRepository 中找到的“void delete(ID)”方法(在我的例子中是“void delete(Long)”
    4. 您更新到 Spring Data 2.x

    问题是 2.x 中的 CrudRepository 不再有“void delete(ID)”方法,将其移除,并添加了新方法“void deleteById(ID)”。

    当 Spring 数据看到它无法识别的删除方法签名时,它会产生有关您的实体类缺少删除属性的错误 - 1.2 和 2.x 都是如此。

    【讨论】:

    • 我遇到了同样的问题,没有找到任何关于这个案例的文档。
    • 我不希望有任何文档。请参阅上面的第 2 点:我选择使用 Repository - 一个空接口 - 由我来正确定义属于 CrudRepository 的某个子集的方法。如果我走这条路并声明一个签名无法识别的方法,那就是我的问题:) 这只是意味着我在升级时必须注意这一点。 Spring 唯一可以做得更好的是提供一条错误消息,仅说明声明了无法识别的方法签名,并带有指向该特定版本 Spring Data 的 Repository 接口的 JavaDocs 的 URL。
    猜你喜欢
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    相关资源
    最近更新 更多