gpt4 book ai didi

java - 如何从存储库返回多个扩展类的类?

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:47 26 4
gpt4 key购买 nike

我想接收从我的抽象类扩展的所有记录。我有以下内容:

产品.java

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name="descriminatorColumn")
@Table(name="ProductCatalog")
public abstract class Product {
@Id
private Long id;
}

PC.java

@Entity
@Table(name = "PC")
public class PC extends Product{
private String pcType;
}

TV.java

@Entity
@Table(name = "TV")
public class TV extends Product{
private String tvType;
}

ProductRepository.java

public interface ProductRepository extends CrudRepository<Product, Long> {
<T extends Product>List<T> findAll(); // not working
}

在我的 Controller 中,我有:

@RequestMapping(value = "/product", method = GET)
public <T extends Product>List<T> findProducts(){
return productRepository.findAll();
}

如何使 findAll() 返回扩展类 Product 的子类中的所有项目?

更新:

我已将以下方法添加到ProductRepository:

<T extends Product>List<T> findProducts();

并在 Controller 中更改它 - 这是正确的方法吗?

我使用它的错误是:

 Caused by:
org.springframework.data.mapping.PropertyReferenceException: No
property findProducts found for type Product!

最佳答案

我在我的存储库中按照以下方式执行此操作。是一个通用答案,因此您可以将它用于任何类,甚至是抽象类:

public <T> List<T> findAll(Class<T> type) {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<T> criteria = builder.createQuery(type);
Root<T> root = criteria.from(type);
CriteriaQuery<T> all = criteria.select(root);
TypedQuery<T> allQuery = entityManager.createQuery(all);

return (List<T>) allQuery.getResultList();
}

编辑:删除错误评论。

关于java - 如何从存储库返回多个扩展类的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38656996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com