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



我使用的是Spring Boot、HSQLDB和Data JPA。我有两个实体:Book(int id,String name,long votesCount(和Vote(int id、int Book_id(我需要将books表中的所有条目都放入List<书籍>并用具有相同期望book_id的投票表中的行数填充votesCount字段。

所以,对于给定的表书籍:id名称1本书12本2

投票:id book_id1 12 13 2

resultList应包含Book的两个实例:名称:book1,votesCount:2名称: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;
}

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

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

您可以将计算字段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;
...
}

最新更新