JPA

JPA (Java-Persistence-API)


JPA์˜ ํƒ„์ƒ


JPA๋Š” ์ž๋ฐ”์™€ RDBMS์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜๋กœ ํƒ„์ƒํ•˜์˜€์œผ๋ฉฐ ORM(Object-relational-mapping)์ด๋‹ค.

๊ฐ์ฒด vs ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

- ์ž๋ฐ”๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์–ธ์–ด๋กœ ๊ฐ์ œ ์ค‘์‹ฌ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.  
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํ…Œ์ด๋ธ” ์ค‘์‹ฌ์ด๋‹ค. 
  • ์ฐจ์ด์ 
    1. ์ƒ์†
    2. ์—ฐ๊ด€๊ด€๊ณ„
    3. ๋ฐ์ดํ„ฐ ํƒ€์ž…
    4. ๋ฐ์ดํ„ฐ ์‹๋ณ„ ๋ฐฉ๋ฒ•

์ด๋Ÿฌํ•œ ์ด์œ ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ์ฒด๋‹ต๊ฒŒ ๋ชจ๋ธ๋ง ํ• ์ˆ˜๋ก ๋งตํ•‘ ์ž‘์—…๋งŒ ๋Š˜์–ด๋‚˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” JAVA์ฝ”๋“œ์™€ SQL ์ฟผ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ์ˆ˜๊ณ ๋กœ์›€์„ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ๋‹ค.

์–ด๋–ค ๊ฐœ๋ฐœ์ž๊ฐ€ โ€˜๊ฐ์ฒด๋ฅผ ์ž๋ฐ” ์ปฌ๋ ‰์…˜์— ์ €์žฅ ํ•˜๋“ฏ์ด DB์— ์ €์žฅํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?โ€™ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์–ด๋–จ๊นŒ ์ƒ๊ฐํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„๊ฒŒ JPA์ด๋‹ค.

JPA ๋™์ž‘ ์œ„์น˜

java โ‡’ JPA โ‡’ JDBC โ‡’ SQL

ORM(Object-relational-mapping) ๊ฐ์ฒด

  • ORM์€ ๊ฐ์ฒด์™€ RDB ๋‘ ๊ธฐ๋‘ฅ ์œ„์— ์žˆ๋Š” ๊ธฐ์ˆ ์ด๋‹ค

  • ๊ด€๊ณ„ ๋งคํ•‘

    • ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋Œ€๋กœ ์„ค๊ณ„
    • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Œ€๋กœ ์„ค๊ณ„
    • ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋งคํ•‘
    • ๋Œ€์ค‘์ ์ธ ์–ธ์–ด๋Š” ๋Œ€๋ถ€๋ถ„ ORM ์ ์šฉ

JPA๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€

- SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ
- ์ƒ์‚ฐ์„ฑ
- ์œ ์ง€๋ณด์ˆ˜
- JPA์™€ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ
- JPA์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋Šฅ

ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

Maven

dependency

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ์ด๋ฉฐ 3๊ฐ€์ง€์ค‘ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

1. ํ•˜์ด๋ฒ„๋„ค์ดํŠธ
2. EclipseLink
3. DataNucles

hibernate-entityManger๋ฅผ dependencyํ•˜๋ฉด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

<!-- pom.xml -->
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-entitymanager</artifactId>
	<version>5.3.10.Final</version>
</dependency>

persistence.xml

JPA๋Š” pom.xml๋ง๊ณ  ์ถ”๊ฐ€๋กœ resource -> META-INF์— persistence.xml์„ ์ƒ์„ฑํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
             
    <persistence-unit name="hello">
        <properties>
            <!-- ํ•„์ˆ˜ ์†์„ฑ -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ • -->
            <!-- ์˜ต์…˜-->
            <property name="hibernate.show_sql" value="true"/> <!-- ์ฟผ๋ฆฌ๋ฅผ ์ฝ˜์†”์— ์ถœ๋ ฅ -->
            <property name="hibernate.format_sql" value="true"/> <!-- ์ฟผ๋ฆฌ๋ฅผ ์ค„์— ๋งž์ถฐ ํฌ๋ฉง -->
            <property name="hibernate.use_sql_comments" value="true"/> <!-- ์ฟผ๋ฆฌ ์‹คํ–‰์— ๋Œ€ํ•œ ์ •๋ณด ํ‘œ์‹œ -->
            <property name="hibernate.jdbc.batch_size" value="10"/> <!-- ํ•˜์ด๋ฒ„๋„ค์ดํŠธ์—์„œ๋Š” value ์‚ฌ์ด์ฆˆ๋งŒํผ ๋ชจ์•˜๋‹ค๊ฐ€ ํ•œ๋ฒˆ์— ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ -->
            <!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
        </properties>
    </persistence-unit>
    
</persistence>

JPA์˜ ๋™์ž‘


JPA๋Š” Persistence๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ 3๊ฐ€์ง€์˜ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค.

1. EntitiyManagerFactory
2. EntityManager
3. EntityTransaction

EntitiyManagerFactory

EntitiyManagerFactory๋Š” JPA๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

JPA ์‹คํ–‰์‹œ EntityManagerFactory๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๋”ฉ์‹œ ํ•œ๋ฒˆ๋งŒ ์„ ์–ธํ•ด์ค€๋‹ค.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // Persistence๋ฅผ ์ด์šฉํ•˜์—ฌ JPA ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ

EntityManager

EntityManager๋Š” ์š”์ฒญ์ด ์žˆ์„๊ฒฝ์šฐ ์ƒ์„ฑ๋œ๋‹ค.

EntityManager๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ ๋™์ž‘ ์™„๋ฃŒ ํ›„ ๊ผญ close()๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

ํŠธ๋ Œ์ ์…˜ ๋‹จ์œ„ DB์ปค๋„ฅ์…˜ => ์ฟผ๋ฆฌ์‹คํ–‰ => ์ข…๋ฃŒ (EntityManager ๋ฅผ ๋งค๋ฒˆ ์„ ์–ธ ํ•„์š”)

EntityManagerFactory emf;
		
EntityManager em = emf.createEntityManager();

em.close();

EntityTransaction

EntityManager๋ฅผ ์„ ์–ธํ•˜์—ฌ persist([Entity.class]) ๋˜๋Š” [Entity.class].set~ , find() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ๋ฅผ ๋™์ž‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ์•„๋ฌด ์ฟผ๋ฆฌ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

์ด์œ ๋Š” ํŠธ๋ Œ์ ์…˜์ด ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

JPA๋Š” ํŠธ๋ Œ์ ์…˜ ์•ˆ์—์„œ๋งŒ ๋™์ž‘ํ•˜๋„๋ก ๋˜์–ด์žˆ์œผ๋ฉฐ ํŠธ๋ Œ์ ์…˜ ๋‹จ์œ„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

EntityTransaction ์„ ์„ ์–ธํ•˜์—ฌ .begin() , .commit() ์‚ฌ์ด์— ์—์„œ ์‹คํ–‰์ด ๋œ๋‹ค.

EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
		
		EntityManager em = emf.createEntityManager();
		
		EntityTransaction tx = em.getTransaction();
		
		tx.begin();

		try {
			
			// JPA ์ฝ”๋“œ ์ž‘์„ฑ


			
			tx.commit(); // ๋กœ์ง ์ •์ƒ ์ˆ˜ํ–‰
		} catch(Exception e) {
			tx.rollback(); // ๋กœ์ง ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ๋กค๋ฐฑ
		} finally {
			// close
 			em.close(); // EntityManager๋Š” ๋ฐ์ดํ„ฐ์ปค๋„ฅ์…˜์„ ๋ฌผ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ๋‹ซ์•„์ค˜์•ผํ•œ๋‹ค.
		}

		emf.close();

JPA CRUD


MyBatis๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฒ˜์Œ JPA๋ฅผ ์ ‘ํ•˜๋ฉด ๋†€๋ž„ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
JPA๋Š” ๊ฐ์ฒด์ง€ํ–ฅ๋งตํ•‘์œผ๋กœ @Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋“ฏ์ด CRUD๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

User Entity

@Entity
public class User {
	
	@Id // PK๊ฐ’ ์„ค์ •
	private long id;
	private String name;
	
	public User() { // JPA๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆฌํ”Œ๋ž™์…˜์„ ์‚ฌ์šฉํ•˜๋ฉฐ ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ์— ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค.
	}
	
	public Member(long id , String name)	 {
		this.id = id;
		this.name = name;
	}
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

INSERT

Mybatis์—์„œ ํ•˜๋˜ INSERT๋Š”

INSERT INTO user(id , name)VALUES(1L , 'HelloB')

์™€ ๊ฐ™์ด mapper.xml์„ ์ž‘์„ฑํ•˜์—ฌ ๋งตํ•‘์„ ์‹œ์บฌ์ค˜์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ JPA๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ Insert๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

User user = new User();
			
user.setId(1L);
user.setName("HelloB");

em.persist(user);

SELECT

์กฐํšŒ๋Š” .find(Entity , pk)๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT * FROM user WHERE id = 1L
User findUser = em.find(User.class, 1L);

UPDATE

์ˆ˜์ •์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ์ž๋ฐ”์—์„œ ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋”ฐ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์ฃผ์ง„ ์•Š๋Š”๋‹ค.
JPA๋Š” ๋˜‘๊ฐ™์€ ๊ฐœ๋…์„ ์ ์šฉํ•˜๋ฉฐ findํ•œ ๋ฐ์ดํ„ฐ๋ฅผ set ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ’๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ์—…๋ฐ์ดํŠธ ์ฟผ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๋‚ ๋ ค์ค€๋‹ค.

UPDATE user SET name = 'HelloJPA' WHERE id = 1L
User findUser = em.find(User.class, 1L);

findUser.setName("HelloJPA");

DELETE

User findUser = em.find(User.class, 1L);

findUser.remove();

CRUD๊ฐ€ ๋งค์šฐ ํŽธ๋ฆฌํ•ด์ง€๊ณ  ๊ฐ„ํŽธํ•ด์กŒ๋‹ค. ์ด๋Ÿฌํ•œ ๋™์ž‘์›๋ฆฌ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ผ๋Š” ๋…ผ๋ฆฌ์  ๊ฐœ๋…์ด ์ ์šฉ๋˜์–ด ์žˆ์–ด ์ด๋ ‡๊ฒŒ ๋™์ž‘ ํ•  ์ˆ˜ ์žˆ๋‹ค.

JPA ํŠน์„ฑ


๊ฐ๊ฐ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ๊ฐ์ž ๋‹ค๋ฅธ ํ•จ์ˆ˜์™€ ๋ฌธ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ํ•ญ์ƒ DB๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๋งž๋Š” ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค˜์•ผํ•˜๋ฉฐ DB์— ์˜์กด์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

JPA์—์„œ๋Š” ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋ฌธ๋ฒ•์ด๋‚˜ ํ•จ์ˆ˜๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฉ์–ธ์ด๋ผ ์นญํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐฉ์–ธ

  • JPA๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ข…์† X
  • ๊ฐ๊ฐ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” SQL ๋ฌธ๋ฒ•๊ณผ ํ•จ์ˆ˜๋Š” ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฆ„
    • ๊ฐ€๋ณ€ ๋ฌธ์ž : MySQL์€ VARCHAR , Oracle ์€ VARCHAR2
    • ๋ฌธ์ž์—ด์„ ์ž๋ฅด๋Š” ํ•จ์ˆ˜ : SQL ํ‘œ์ค€์€ SUBSTRING(), Oracle์€ SUBSTR()
    • ํŽ˜์ด์ง• MySQL์€ LIMIT , Oracle์€ ROWNUM
  • ๋ฐฉ์–ธ : SQL ํ‘œ์ค€์„ ์ง€ํ‚ค์ง€ ์•Š๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ์˜ ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ

JPA์—์„œ๋Š” ์ด์™€ ๊ฐ™์ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฐฉ์–ธ์„ ๊ฐ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋งž๊ฒŒ ๋™์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค์ค€๋‹ค.

(hibernate.dialect ์ค‘์š”)

JPQL


JPA๋Š” ํ…Œ์ด๋ธ”์„ ๋Œ€์ƒ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งœ์ง€ ์•Š์œผ๋ฉฐ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ (๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์ฟผ๋ฆฌ).

ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ• ๋•Œ ์กฐ์ธ๊ณผ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ๋งŽ์ด ์ž‘์„ฑํ•˜๊ฒŒ๋œ๋‹ค.
๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ JPA๋กœ๋งŒ ์ž‘์„ฑํ•˜๊ธฐ์—๋Š” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

1. ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ
2. ๊ฒ€์ƒ‰์„ ํ•  ๋–„๋„ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฒ€์ƒ‰
3. ๋ชจ๋“  DB ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ
4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ DB์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ํฌํ•จ๋œ SQL์ด ํ•„์š”

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ JPQL์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋А์ •๋„ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ex) JPQL์‚ฌ์šฉ

  • em.createQuery(โ€select m from Member as mโ€ , [Entity.class])

      . setFirstResult(1)  // MySQL : LIMIT   , ORACLE : ROWNUM (์‹œ์ž‘ ๋ฒˆํ˜ธ)
    
      . setMaxResult(5) // (๊ฐ€์ ธ์˜ค๋Š” ๊ฐฏ์ˆ˜)
        
      . getResultList();
    
  • ์œ„์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ๋งž๋Š” ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด์ค€๋‹ค.

์‹ค๋ฌด์—์„  JPQL ์—†์ด๋Š” ์ž‘์—…์ด ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (์ƒ์„ธ์กฐํšŒ ๋ฐ ์กฐ์ธ ์ฟผ๋ฆฌ ์ž‘์„ฑ)

Categories:

Updated:

Leave a comment