Mon entité produit ressemble ci-dessous:requête Hibernate à la requête Sql
@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<>();
}
ProductEntity:
@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<>();
}
Je veux obtenir toutes les commandes où le nom du produit est égal à la valeur désirée. Et j'écris sql query pour obtenir le résultat de la base de données, mais je ne peux pas écrire la requête hibernate pour Spring Data JPA.
Ma requête pour postgreSQL ressemble à ceci:
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';
Et cette requête me retourne un identifiant de l'ordre, product_id et le nom du produit. Et ça fonctionne. Mais je ne savais pas comment écrire cette question en tant que requête de printemps en utilisant @Query.
je besoin d'un metohod dans mon dépôt:
@Repository
public interface OrderRepository extends JpaRepository<OrderEntity, Long> {
@Query("") <- place for my query in Hibernate sql
List<OrderEntity> findAllByProductName(@Param("name") String name);
}
Avez-vous lire la documentation? La langue est nommée HQL (ou JPQL). Pas Hibernate SQL. Lisez https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#hql et essayez quelque chose. Votre requête est assez simple à écrire, si vous prenez le temps de lire la documentation et les exemples, et essayez des choses. –