Java @spring数据jpa中@OneToMany关联的对象计数公式

Java @spring数据jpa中@OneToMany关联的对象计数公式,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,在JavaRESTAPI、SpringBoot和SpringDTA jpa中,db是postgresql 我有一个Book实体,它包含bookCopies。这些书籍副本可以提供也可以不提供。 我正试图检索这本有多少册的书。 这些书可以按书名或作者姓名进行搜索 我通过在我的book entity中添加一个@Transient字段来获取信息,在getNbCopiesAvailable()方法上添加了@Transient注释,但我被要求使用@Formula注释来完成,我不知道怎么做 我实际上得到了一个

在JavaRESTAPI、SpringBoot和SpringDTA jpa中,db是postgresql 我有一个
Book
实体,它包含
bookCopies
。这些
书籍副本可以提供也可以不提供。
我正试图检索这本有多少册的书。
这些书可以按书名或作者姓名进行搜索

我通过在我的book entity中添加一个
@Transient
字段来获取信息,在
getNbCopiesAvailable()
方法上添加了
@Transient
注释,但我被要求使用
@Formula
注释来完成,我不知道怎么做

我实际上得到了一个错误:

org.postgresql.util.PSQLException: ERREUR: plus d'une ligne renvoyée par une sous-requête utilisée comme une expression 
// which means that several lines are sent by the sub-query
以下是我的实体:

@实体
@吸气剂
@塞特
@诺尔格构装师
公共课堂用书{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
专用字符串isbn;
@NotNull
私有字符串标题;
@杰索尼奥雷
@OneToMany(mappedBy=“book”,cascade=CascadeType.ALL,orphan=true)
私有列表copyList=new ArrayList();
@NotNull
@ManyToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE})
@JoinTable(name=“book\u author”,
joinColumns=@JoinColumn(name=“book\u id”),
inverseJoinColumns=@JoinColumn(name=“author\u id”))

private Set),但它仍然不起作用。

您需要参考where子句中的书:

@Formula("(SELECT COUNT(bc.id) FROM book b " +
         "left join book_copy bc on bc.book_id = b.id " +
         "WHERE bc.available = 'true' " +
         "and b.id = id " + // This is the important condititon
         "GROUP BY b.id)")
private Long nbCopiesAvailable;

否则,您的查询将返回所有书籍。

您在不在“选择”中的列上有一个group by。您不需要group by,因为您只是在选择计数。如果我尝试在jpql中编写@formula,它根本不起作用。需要是
@formula
的本机SQL。谢谢,没有group by和解决方案se,它就可以工作被选中!下面