当前位置: 首页 > 知识库问答 >
问题:

使用Spring数据JPA选择一列

潘凯
2023-03-14

有人知道如何使用Spring数据JPA获得一个列吗?我在我的Spring Boot项目中创建了一个存储库,如下所示,但总是得到{“cause”:null,“message:“persistenentity不能为null!”) 访问Restful URL时出错。

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UsersRepository extends CrudRepository<Users, Integer> {

    @Query("SELECT u.userName  FROM Users u")
    public List<String> getUserName();
}

然后,如果我访问像.../user/search/getUserName这样的Restful URL,我会得到错误:{"原因":空,"消息":"持久性实体不得为空!"}


共有3个答案

竺承望
2023-03-14

这对我有用。

public interface UserDataRepository extends JpaRepository<UserData, Long> {

    @Query(value = "SELECT emp_name FROM user_data", nativeQuery = true)
    public List<Object[]> findEmp_name();
}


System.out.println("data"+  userDataRepository.findEmp_name());

上面这行给了我这个结果:

数据[abhijeet, abhijeet1, abhijeet2, abhijeet3, abhijeet4, abhijeet5]

巢烨
2023-03-14

概念是:在实体类中创建一个只包含所需即时变量的构造函数。构造器和使用下面的存储库中所示的方法。

假设您有一个如下所示的接口存储库

>

  • 仓库实现:

    public interface UserRepository<User> extends JpaRepository<User,String>
    {
        @Query(value = "select new com.org.User(usr.userId) from User usr where usr.name(:name)")
        List<User> findUserIdAlone(@Param("name") String user);
    }
    

    控制器

    @RestController
    public class UserController 
    {
        @Autowired
        private UserRepository<User> userRepository; 
    
        @Res
        public ResponseEntity<User> getUser(@PathVariable("usrname") String userName)
        {
            User resultUser = usrRepository.findUserIdAlone(userName);
            return ResponseEntity.ok(resultUser);
        }
    }
    
    public class User 
    {
    
        private String userId,userName;
    
        public User(String userId) 
        {
            this.userId=userId;
        }
        // setter and getters goes here
    }
    

  • 白彦
    2023-03-14

    创建投影界面

    public interface UserNameOnly {
        String getUserName();
    }
    

    然后在你的仓库界面中返回那个类型而不是用户类型

    public interface UserRepository<User> extends JpaRepository<User,String> {
        List<UsernameOnly> findNamesByUserNameNotNull();
    }
    

    投影界面中的get方法必须与JPA存储库中定义类型的get方法匹配,在本例中为User。“FindBysomePropertyontheObjectThatNotNull”允许您根据某些条件获取实体列表(与Iterable相反),对于findAll,如果唯一标识符(或任何其他非null字段)不为null,则可以简单地获得实体列表。

     类似资料:
    • Mine当前使用的是application.properties文件中包含: 提前致谢

    • 我有下表 我的表格 id|col1|col2|col3|col4|col5 我使用的是spring数据。我有以下存储库/DAO类 我想取一些列,比如在一个道号中我想取col1和col2,在另一个道号中我想取col1、col3、col5等等... 我想要

    • 我正在使用Spring JPA执行所有数据库操作。但是,我不知道如何在Spring JPA中从表中选择特定的列? 例如:

    • 我试图使用jpa组件来选择从标题中获取的id。我在文档中找到了一个使用本机select查询的示例: 我试图用${header.id}替换“1”常量: 这似乎不管用,我明白了: 也许还有别的方法可以让它发挥作用?

    • 我正在编写一个JavaFX应用程序,该应用程序需要与一个SQLite数据库(存储为数据库)进行通信。db文件,用户已从其文件系统中选择。这可以是任何一个。我在构建时不知道的db文件。 我希望使用Spring/JPA2,但据我所知,它只允许使用在构建时配置的数据库。我想要的东西在Spring/JPA2中可能吗?如果可能,我将如何实现?

    • 我在OpenJFX中使用Spring JPA。这个项目是JavaFX weaver,只需在pom中添加spring启动数据jpa。 然而,我的Spring JPA的开始时间是15-20秒,在Spring初始化之前,UI不会显示。当用户启动应用程序时,每次都要花很多时间! 作为一种解决方法,我尝试创建一个没有Spring的简单java fx应用程序(在这里使用这个演示),然后从main方法开始,通过