```java
SELECT p FROM Product p WHERE p.number = ?1;
엔티티타입 엔티티속성
```
List<Person> findByLastnameAneEmail(String lastName, String email);
exists -By
* 특정 데이터 유무 확인하며 boolean 타입 반환
```java
boolean existsByNumber(Long number);
```
count -By
* 조회 쿼리 수행한 후 결과로 나온 레코드 리턴
```java
long countByName(String name);
```
delete -By or remove -By
* 삭제 쿼리 수행
```java
void deleteByNumber(Long number);
long removeByNumber(String name);
```
```java
Product findByNumberIs(Long number);
```
```java
Product findByNumberAndName(Long number, String name);
```
@Query 어노테이션 사용하는 메서드
@Query("select p from Product p where p.name = ?1")
List<Product> findByName(String name);
@Query + @Param 사용한 메서드(파라미터 바인딩)
@Query("select p from Product p where p.name = :name")
List<Product> findByName(@Param("name") String name);
특정 컬럼만 추출하는 쿼리
@Query("select p.name, p.price p.stock from Product p where p.name = :name")
List<Object[]> findByNameParam2(@Param("name") String name);
Provider(1) - Product(N)의 엔티티가 있다고 가정해보자.
이 경우 Product(N) 쪽이 @ManyToOne으로 Provider(1)을 참조하고 있으나 Provider(N)은 Product(1) 를 참조하지 않는 상황이다. 이런 경우 직접 조인에 필요한 조건은 on
을 사용해 작성해야 한다.
(특정 회사에 속한 상품들을 조회하는 경우)
@Query("select r, t
from Provider r left join Product t
on t.provider = r
where r.productId =: productId")
List<Object[]> getProviderWithProduct(@Param("productId") Long productId);