#30 jpa basic: jpql - fetch join
This commit is contained in:
102
hello-jpa/src/main/java/com/hello/jpa/query/FetchJoin.java
Normal file
102
hello-jpa/src/main/java/com/hello/jpa/query/FetchJoin.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
package com.hello.jpa.query.entity;
|
package com.hello.jpa.query.entity;
|
||||||
|
|
||||||
|
import org.hibernate.annotations.BatchSize;
|
||||||
|
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
@@ -15,6 +17,7 @@ public class Team {
|
|||||||
private Long id;
|
private Long id;
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
@BatchSize(size = 100)
|
||||||
@OneToMany(mappedBy = "team")
|
@OneToMany(mappedBy = "team")
|
||||||
private List<Member> members = new ArrayList<>();
|
private List<Member> members = new ArrayList<>();
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@
|
|||||||
<property name="hibernate.format_sql" value="true"/>
|
<property name="hibernate.format_sql" value="true"/>
|
||||||
<property name="hibernate.use_sql_comments" value="true"/>
|
<property name="hibernate.use_sql_comments" value="true"/>
|
||||||
<property name="hibernate.hbm2ddl.auto" value="create" />
|
<property name="hibernate.hbm2ddl.auto" value="create" />
|
||||||
|
<property name="hibernate.default_batch_fetch_size" value="100" />
|
||||||
</properties>
|
</properties>
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
</persistence>
|
</persistence>
|
||||||
Reference in New Issue
Block a user