分配给另一个表 JPA 的实体字段计数

Rom*_*Alf 0 java sql hibernate spring-data-jpa

我正在使用 Spring Boot、HSQLDB 和 Data JPA。我有两个实体: Book(int id, String name, long votesCount) 和 Vote(int id, int book_id) 我需要将 books 表中的所有条目获取到 List<Book> 中,并用 votes 表中的行数填充 votesCount 字段具有相同的所需 book_id。

因此,对于给定的表 books: id name 1 book1 2 book2

投票:id book_id 1 1 2 1 3 2

结果列表应包含 2 个 Book 实例:名称:book1,votesCount:2 name:book2,votesCount:1

做这个的最好方式是什么?

@Entity
@Table(name = "books")
class Book{

  @Id
  int id;
  String name;

  @OneToMany(fetch = FetchType.LAZY, mappedBy = "book")
  List<Vote> votes;

  @Transient
  long voteCount;
}
Run Code Online (Sandbox Code Playgroud)

////////////////////////////////////////////////////////////////////

@Entity
@Table(name = "votes")
class Vote{
  @Id
  int id;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "book_id", foreignKey = @ForeignKey(name = "fk_book_id"))
  Book book;
}
Run Code Online (Sandbox Code Playgroud)

Aki*_*dic 5

您可以将计算字段 votesCount 与 @Formula 一起使用;

@Entity
@Table(name = "books")
class Book{

  @Id
  int id;
  String name;
  
  @Formula(value = "(SELECT COUNT(*) FROM votes v WHERE v.book_id=id)"))
  Long votesCount;

...
}
Run Code Online (Sandbox Code Playgroud)