JPA
-
@Transactional(readOnly = true) 는 Flush 가 동작안할꺼라 믿었다JPA 2024. 4. 23. 23:26
public class MarineService { WeaponService weaponService; @Transactional public Marine getMarine(){ Factory factory = factoryRepository.findById(1L).get(); Marine marine = factory.createMarine("marine"); Weapon weapon = weaponService.getWeapon(); marine.setWeaponName(weapon.getName()); return marine } } public class WeaponService { @Transactional(readOnly = true) public Weapon getWeapon(){ retur..
-
QueryDSL에서 SubQuery 에는 limit 를 사용 할 수 없다.JPA 2023. 11. 15. 16:56
SubQuery 종류 중from 절에 사용하는 인라인뷰는 지원하지 않으니 당연히 limit를 사용할 수 없고select의 Scalar SubQuery 나 where 절 SubQuery에 limit 사용이 안된다는 것을 알게 되었다. Scalar SubQuery에서 limit 분실select( new QModel( orders.orderId, JPAExpressions.selectDistinct(orderHistory.message) .from(orderHistory) .where(orderHistory.orderId.eq(orders.orderId)) .orderBy(orderHistory.createDateTime..
-
QueryDSL-JPA에서 인라인뷰를 써야 한다면 도망치자JPA 2023. 10. 18. 00:07
Query DSL JPA을 사용도중 select, where에 Sub Query는 자주 사용하였지만 from 절에 Sub Query를 작성하려다가 문제를 만나게 되었다. QueryDSL로 from절 SubQuery, 즉 inline view를 작성하려 하니 지원하지 않는다는 말을 듣게 되었고 이게 Query DSL 이 제공 안 하는 건지, 하이버네이트가 지원 안 하는 건지 알아보니 예전 하이버네이트 이슈 중 inline view 관련 이슈를 확인해 볼 수 있었다. But! Hibernate 6.1 버전에서부터는 지원을 시작하였다. 그렇지만.. 사용 중인 프로젝트의 Hibernate 버전은 5 버전이었다. 즉 이 프로젝트에서는 Hibernate로 인라인뷰를 사용할 수 없었고 즉 이 문제를 해결할 수는 없었..
-
JPA Column의 null 제약 조건JPA 2023. 2. 7. 15:48
JPA 에서 DDL 생성시 제약 조건을 매핑하는 과정에서 해당 필드에 null이 들어올수없도록 제약을 걸고 싶을때 @Column(name = "name", nullable = false) private String name; 위와같이 nullable 를 false 로 주어 null 이 들어올수없는 제약을 걸어둘수있다. create table tb_library ( id varchar(255) not null, **name varchar(255) not null,** primary key (id) ) engine=InnoDB; 실제 테이블 생성 쿼리를 보면 name 컬럼에 not null 조건이 붙은 상태로 생성하는것을 볼수있다. 이렇게되면 name 필드에 null 이 들어간 엔티티는 DB 에 들어갈수는있..
-
JPA 에서 GeneratedValue 를 하지않는다는것은JPA 2022. 9. 3. 16:56
JPA 에서 Entity 를 생성하여 PK 를 잡는 ID 를 지정할때 @Id @GeneratedValue @Column(name = "order_id") private Long id; private String title; @ManyToOne(fetch = LAZY) @JoinColumn(name = "member_id") private Member member; 위와같이 GeneratedValue 를 통해 자동생성을 둘수도있지만 String 와 같은 다른 타입 PK 로지정이 가능하다. GeneratedValue 가 아닌 다른 타입으로 지정한다는것은 결국 데이터를 추가할때 PK를 미리 지정해준다는 의미일것이다. GeneratedValue 의 동작 GeneratedValue 는 Entity 객체를 생성후 ..
-
[JPA] JPA 란JPA 2020. 12. 8. 01:07
1. JPA(Java Persistence API) 1.1 JPA 란 먼저 JPA 란 JAVA에서 제공하는 API로 ORM 기술의 표준 기술이다. 즉 자바에서 관계형 데이터베이스를 사용하는 방식인데 자바 클래스와 DB 테이블을 매핑하여 데이터베이스를 조작할 수 있게 해 준다. 1.2 ORM 이란? ORM 은 자바 객체와 DB 테이블을 맵핑하여 SQL을 작성하지 않고도 객체지향 언어에서 그대로 사용하는 것으로 DBMS 를에대한 종속성을 줄일 수 있다. 그대로 사용한다는 것은 SQL 쿼리를 직접 작성하는 것이 아닌 자동으로 생성하여 사용한다는 것이다. 1.3 JPA를 사용하는 이유 대부분의 프로그램이 어느 정도 기능을 하기 위해서는 당연하게도 데이터베이스를 사용해야 만한다. 결국 프로그램은 밖에서 데이터를 ..