#30 jpa basic: jpql - fetch join

This commit is contained in:
haerong22
2023-02-06 01:52:53 +09:00
parent 41337aafb8
commit c09c5781a0
3 changed files with 106 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
package com.hello.jpa.query;
import com.hello.jpa.query.entity.Member;
import com.hello.jpa.query.entity.Team;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import java.util.List;
public class FetchJoin {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Team team = new Team();
team.setName("team1");
em.persist(team);
Team team2 = new Team();
team2.setName("team2");
em.persist(team2);
Member member = new Member();
member.setName("member1");
member.setTeam(team);
em.persist(member);
Member member2 = new Member();
member2.setName("member2");
member2.setTeam(team);
em.persist(member2);
Member member3 = new Member();
member3.setName("member3");
member3.setTeam(team2);
em.persist(member3);
em.flush();
em.clear();
// List<Member> result = em.createQuery(
// "select m from Member m join fetch m.team",
// Member.class
// )
// .getResultList();
//
// result.forEach(m -> {
// System.out.println("m.getName() = " + m.getName() + ", " + m.getTeam().getName());
// });
//
// List<Team> result2 = em.createQuery(
// "select t from Team t join fetch t.members",
// Team.class
// )
// .getResultList();
//
// result2.forEach(t -> {
// System.out.println("team = " + t.getName() + ", members = " + t.getMembers().size());
// });
//
// List<Team> result3 = em.createQuery(
// "select distinct t from Team t join fetch t.members",
// Team.class
// )
// .getResultList();
//
// result3.forEach(t -> {
// System.out.println("team = " + t.getName() + ", members = " + t.getMembers().size());
// });
List<Team> result4 = em.createQuery(
"select t from Team t",
Team.class
)
.setFirstResult(0)
.setMaxResults(2)
.getResultList();
result4.forEach(t -> {
System.out.println("team = " + t.getName() + ", members = " + t.getMembers().size());
t.getMembers().forEach(System.out::println);
});
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}

View File

@@ -1,5 +1,7 @@
package com.hello.jpa.query.entity;
import org.hibernate.annotations.BatchSize;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@@ -15,6 +17,7 @@ public class Team {
private Long id;
private String name;
@BatchSize(size = 100)
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();

View File

@@ -56,6 +56,7 @@
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
<property name="hibernate.default_batch_fetch_size" value="100" />
</properties>
</persistence-unit>
</persistence>