Meine Einheit von Produkt sieht wie folgt:Hibernate-Abfrage SQL-Abfrage
@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<>();
}
Ich möchte alle Aufträge bekommen, wo Produktnamen gewünschten Wert entspricht. Und ich schreibe SQL-Abfrage, um das Ergebnis aus der Datenbank zu erhalten, aber ich kann keine Hibernate-Abfrage für Spring Data JPA schreiben.
Meine Anfrage für postgreSQL sieht wie folgt aus:
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';
Und diese Abfrage zurückgeben mir eine ID von Ordnung, product_id und Produktname. Und das funktioniert. Aber ich wusste nicht, wie ich diese Frage als Spring Query mit @Query schreiben sollte.
brauche ich eine metohod in meinem Repository:
@Repository
public interface OrderRepository extends JpaRepository<OrderEntity, Long> {
@Query("") <- place for my query in Hibernate sql
List<OrderEntity> findAllByProductName(@Param("name") String name);
}
Sie beitreten Lesen Sie die Dokumentation? Die Sprache heißt HQL (oder JPQL). Nicht Hibernate SQL. Lesen Sie https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#hql und probieren Sie etwas aus. Ihre Abfrage ist ziemlich einfach zu schreiben, wenn Sie sich die Zeit nehmen, die Dokumentation und die Beispiele zu lesen und Dinge auszuprobieren. –