Custom Query for fetching data from multiple tables in spring Data Jpa

前端 未结 2 763
梦毁少年i
梦毁少年i 2021-02-10 00:49

Entities are following

Product Table

@Entity
public class Product implements Serializable {
/*@Id
@GeneratedValue(strategy = Generation         


        
相关标签:
2条回答
  • 2021-02-10 01:06

    Your query is not a valid HQL query, which hiberate understands. You can use a native SQL query, but the use case mentioned can be easily achieved with HQL. Before that, lets use the proper annotations mappings for ManytoMany association:

    @Entity
    @Table(name = "order_detail")
    public class OrderDetail {
    
         @Id
         @GeneratedValue(strategy = GenerationType.AUTO)
         private Integer id;
    
    
         @ManyToOne
         @JoinColumn(name="purchased_By")
         private user PurchasedBy;
    
    
         @ManyToMany
         @JoinTable(
           name="order_detail_productlist",
           joinColumns=@JoinColumn(name="order_detail_id", referencedColumnName="id"),
           inverseJoinColumns=@JoinColumn(name="productlist_id", referencedColumnName="id"))
          private Set<Product> productlist = new HashSet<Product>();
    

    Product:

    @Entity
    @Table(name ="product")
    public class Product implements Serializable {
    
          @Id
          @GeneratedValue(strategy = GenerationType.AUTO)
          private Integer id;
    
          @NotNull(message = "Product name must not be null")
          @NotEmpty
          @Column(name = "name", nullable = false)
          private String name;
    
    
          @ManyToOne
          @JoinColumn(name="category_id")
          private Category category;
    
          @ManyToMany(mappedBy = "productlist")
          private List<OrderDetail> orderDetail =new ArrayList<OrderDetail>();
    

    And query :

    public final static String product_ordered ="Select p from Product p Join p.orderDetail od Where od.id = :id";
    
    @Query(product_ordered)
    public List<Product> findById(@Param("id") int id);
    

    Here is a beginner friendly resource to start with JPA

    0 讨论(0)
  • 2021-02-10 01:17

    The way you are doing is not possible because you are assigning the result set to List<Product> but the query has some joins, it mean that the result of query is not a Product entity.

    You can try to do a Native query. For example:

    @PersistenceContext
    private EntityManager entityManager;
    
    public List<Object[]> customQuery(int id) {
        Query nativeQuery = entityManager.createNativeQuery(product_ordered).setParameter("id",id);
        return nativeQuery.getResultList();
    }
    
    0 讨论(0)
提交回复
热议问题