首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spring Boot JPA返回List of List而非List of Object

Spring Boot JPA返回List of List而非List of Object
EN

Stack Overflow用户
提问于 2020-04-06 10:15:08
回答 3查看 736关注 0票数 0

我是spring boot jpa的新手。我想将返回类型作为列表获取,但我只获取了列表

我的实体类

代码语言:javascript
运行
复制
@Component
@Entity
@Table(name = "USERDB.USERS")
public class User() {
  @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_SEQ")
    @SequenceGenerator(sequenceName = "MY_SEQ_NAME", allocationSize = 1), name = "MY_SEQ")
  @Column(name = "userId")
  private long id;
  @Column(name = "firstName")
  private String fName;
  @Column(name = "midName")
  private String mName;
  @Column(name = "lastName")
  private String lName;
  @Column(name = "email")
  private String email;
  @Column(name = "createdDate")
  private Timestamp createdOn;

public User() {
    this.createdOn = new Timestamp(System.currentTimeMillis()
}

//SETTERS & GETTERS

}

我的存储库;

代码语言:javascript
运行
复制
public interface UserRepository extends JpaRepository<User, String> {

  @Query("SELECT id fName, lastName, email FROM User u WHERE u.fName=(:fName)")
  public List<User> findByEmail(@Param("fName") String fName);

}

我想要的只是获得一个json响应,作为一个带有键值对的用户数组,如下所示

代码语言:javascript
运行
复制
    [
   [
     "id": 1001,
     "fName": John",
     "lName": "Doe",
     "email": "johnd@example.com"       
   ],
   [
     "id": 1002,
     "fName": "John",
     "lName": "Simmons",
     "email": "johns@example.com"       
   ],

]

但是我得到了一个列表,其中只包含下面的值。

代码语言:javascript
运行
复制
[
   [
     1001,
     "John",
     "Doe",
     "johnd@example.com"       
   ],
   [
     1002,
     "John",
     "Simmons",
     "johns@example.com"       
   ],

]

我不确定我做错了什么,或者这是我应该得到的结果吗?这是我的实际程序的一个假设示例。如果有任何错误,请原谅。

下面是我的控制器类

代码语言:javascript
运行
复制
@Restcontroller
public class UserController {
@Autowired
UserRepository repo;
@GetMapping("/user/{fname}")
  public List<User> getUserByName(
         @PathVariable("fname") String fname) {

  return repo.findByEmail(fname);
  }
}
EN

回答 3

Stack Overflow用户

发布于 2020-04-06 10:45:44

关于你的代码有几点:

代码语言:javascript
运行
复制
public interface UserRepository extends JpaRepository<User, String> {

   Query("SELECT id fName, lastName, email FROM User u WHERE u.fName=(:fName)")
   public List<User> findEmails(@Param("fName") String fName);

 }

您正在使用JpaRepository<User, String>创建存储库,但是在您的类中,User id不是String类型。考虑将ID字段设置为字符串。

该方法是findEmails,但它返回的是List<User>?我希望这样的函数会返回List<String> --每个字符串当然都是一封电子邮件。您可以考虑重命名此函数,以避免将来的混淆。不过没什么大不了的。

在您的查询中:

@Query("SELECT id fName, lastName, email FROM User u WHERE u.fName=(:fName)")

您应该将其更改为:

@Query("SELECT u.id u.fName, u.lastName, u.email FROM User u WHERE u.fName=(:fName)")

这应该可以解决您所遇到的序列化问题。

票数 0
EN

Stack Overflow用户

发布于 2020-04-06 14:03:12

我非常同意费米-4的建议。使用更好的命名约定是拥有更好的、易于管理的代码的关键。你应该跟随他们。要解决您的问题,只需执行以下操作,它将解决您的问题。

代码语言:javascript
运行
复制
   public interface UserRepository extends JpaRepository<User, long> {


  public List<User> findByFname(String fName);

 }

另外,请考虑更改用户实体定义以添加可序列化的实现,如下所示

代码语言:javascript
运行
复制
    @Component
    @Entity
    @Table(name = "USERDB.USERS")    
    public class User implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 3L;
票数 0
EN

Stack Overflow用户

发布于 2020-04-06 17:46:15

  1. 创建附加的User构造函数,其中只有几个要从表

中提取的参数

代码语言:javascript
运行
复制
public User(long id, String fName, String lastName, String email) {
    this.id = id;
    this.fName = fName;
    this.lastName = lastName;
    this.email = email;
}

  1. 调整JP查询类似于跟随

代码语言:javascript
运行
复制
@Query("SELECT new com.package.User(u.id, u.fName, u.lastName, u.email) FROM User u WHERE u.fName = :fName")
public List<User> findByEmail(@Param("fName") String fName);

User的实际包替换com.package

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61052032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档