Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA,Hibernate作为JPA提供程序_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java Spring数据JPA,Hibernate作为JPA提供程序

Java Spring数据JPA,Hibernate作为JPA提供程序,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,使用Spring引导应用程序和Spring数据jpa,hibernate作为jpa提供程序 在一个扩展JpaRepository的接口中创建了一个默认方法 请检查代码 public interface UserDao extends JpaRepository<User, UUID> { default void softDelete(UUID id) { User existingUser = findOne(id); if (existingUser != n

使用Spring引导应用程序和Spring数据jpa,hibernate作为jpa提供程序

在一个扩展JpaRepository的接口中创建了一个默认方法

请检查代码

public interface UserDao extends JpaRepository<User, UUID> {

default void softDelete(UUID id) {
    User existingUser = findOne(id);

    if (existingUser != null)
        existingUser.setActive(false);

    throw new EntityNotFoundException();
    }
}
知道我错过了什么吗

两件事:

  • 无论您是否获得记录,您总是会得到一个
    EntityNotFoundException
    异常,因为我假设您想在找不到任何记录时发送该异常
  • 您可能也想返回用户,但返回类型为void。我会将返回类型改为用户,如下所示:

    default User softDelete(UUID id) {
        User existingUser = findOne(id);
        if (existingUser != null) {
            existingUser.setActive(false);
        } else {
            throw new EntityNotFoundException();
        }
        return existingUser;//you may want to save this user again with isActive flag now false
    }
    
  • 两件事:

  • 无论您是否获得记录,您总是会得到一个
    EntityNotFoundException
    异常,因为我假设您想在找不到任何记录时发送该异常
  • 您可能也想返回用户,但返回类型为void。我会将返回类型改为用户,如下所示:

    default User softDelete(UUID id) {
        User existingUser = findOne(id);
        if (existingUser != null) {
            existingUser.setActive(false);
        } else {
            throw new EntityNotFoundException();
        }
        return existingUser;//you may want to save this user again with isActive flag now false
    }
    

  • 除了SMA提供的答案外,还有两件事

  • 我现在不记得了,但是AFAIR建议将扩展Spring数据存储库的自定义类也命名为Repository,而不是Dao

  • 您确定此用户在数据库中吗?如何初始化数据库-Flyway?Spring启动自动schema.sqldata.sql文件

  • 对于您提供的代码,即使实体位于数据库中,也会引发异常


  • 除了SMA提供的答案外,还有两件事

  • 我现在不记得了,但是AFAIR建议将扩展Spring数据存储库的自定义类也命名为Repository,而不是Dao

  • 您确定此用户在数据库中吗?如何初始化数据库-Flyway?Spring启动自动schema.sqldata.sql文件

  • 对于您提供的代码,即使实体位于数据库中,也会引发异常


  • 你的问题问对了!我必须补充的是,您应该尝试使用JpaRepository,而不在其中放入任何逻辑,只需将其用于CRUD操作,并在您的服务层中执行逻辑。像这样:

    public interface UserDao extends JpaRepository<User, UUID> {
    
    @Modifying
    @Query("update User u set u.active = false where u.id = :id")
    default User softDelete(@Param("id) UUID id) throws EntityNotFoundException;
    }
    
    public接口UserDao扩展了JpaRepository{
    @修改
    @查询(“更新用户u设置u.active=false,其中u.id=:id”)
    默认用户softDelete(@Param(“id”)UUID id)抛出EntityNotFoundException;
    }
    
    然后您可以在服务中执行错误处理。
    下面的示例展示了一些编写自定义查询以更好地满足您的需求的好例子。

    SMA抓住了您的问题所在!我只需要补充一点,您应该尝试使用JpaRepository,而不在其中放入任何逻辑,只需将其用于CRUD操作,并在服务层中执行逻辑。例如:

    public interface UserDao extends JpaRepository<User, UUID> {
    
    @Modifying
    @Query("update User u set u.active = false where u.id = :id")
    default User softDelete(@Param("id) UUID id) throws EntityNotFoundException;
    }
    
    public接口UserDao扩展了JpaRepository{
    @修改
    @查询(“更新用户u设置u.active=false,其中u.id=:id”)
    默认用户softDelete(@Param(“id”)UUID id)抛出EntityNotFoundException;
    }
    
    然后您可以在服务中执行错误处理。
    下面展示了一些编写自定义查询以更好地满足您需要的好例子

    OMG。我只是忘记了我的java基础知识。我很抱歉,甚至张贴了这个问题。但是非常感谢大家。这太愚蠢了(天哪,我刚刚忘记了我的java基础知识。我很抱歉发布了这个问题。但非常感谢大家。这太愚蠢了。)(