gpt4 book ai didi

java - Hibernate查询转Sql查询

转载 作者:行者123 更新时间:2023-11-29 12:09:21 24 4
gpt4 key购买 nike

我的产品实体如下所示:

@Entity
@Table(name = "order")

public class OrderEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "order_id")
private Long id;

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name = "order_products",
joinColumns = @JoinColumn(name = "order_id", referencedColumnName = "order_id"),
inverseJoinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id")
)
private Set<ProductEntity> products = new HashSet<>();
}

产品实体:

@Entity
@Table(name = "product")
public class ProductEntity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;

@Column(unique = true)
private String name;

@ManyToMany(mappedBy = "products")
private Set<OrderEntity> orders = new HashSet<>();
}

我想获得产品名称等于想要的值的所有订单。我编写了 sql 查询以从数据库中获取结果,但我无法为 Spring Data JPA 编写 hibernate 查询。

我对 postgreSQL 的查询如下所示:

SELECT o.order_id, op.product_id, p.name
FROM public.order o
INNER JOIN public.order_products op
ON p.order_id = op.product_id
INNER JOIN public.product p
ON op.product_id = p.id
WHERE p.name = 'Foo';

此查询返回订单 ID、product_id 和产品名称。这行得通。但是我不知道如何使用@Query 将这个问题写成spring query。

我的存储库中需要一个方法:

@Repository
public interface OrderRepository extends JpaRepository<OrderEntity, Long> {
@Query("") <- place for my query in Hibernate sql
List<OrderEntity> findAllByProductName(@Param("name") String name);
}

最佳答案

试试这个:(它返回完整的 OrderEntity 对象)

@Query("select  o from OrderEntity o join o.products prod where prod.name = :name")
List<OrderEntity> findAllByProductName(@Param("name") String name);

如果您需要获取产品的所有数据,请使用:....OrderEntity o join o.products... 在查询中而不是 OrderEntity o join o.products

关于java - Hibernate查询转Sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44890346/

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