diff --git a/hello-jpa/src/main/java/com/hello/jpa/query/Function.java b/hello-jpa/src/main/java/com/hello/jpa/query/Function.java new file mode 100644 index 00000000..1d061c86 --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/query/Function.java @@ -0,0 +1,78 @@ +package com.hello.jpa.query; + +import com.hello.jpa.query.entity.Member; +import com.hello.jpa.query.entity.MemberType; +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 Function { + + 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("team"); + em.persist(team); + + Member member = new Member(); + member.setName("member"); + member.setAge(10); + member.setTeam(team); + member.setMemberType(MemberType.ADMIN); + + em.persist(member); + + Member member2 = new Member(); + member2.setName("hello world"); + member2.setAge(70); + member2.setTeam(team); + member2.setMemberType(MemberType.USER); + + em.persist(member2); + + em.flush(); + em.clear(); + +// String query = "select concat('a', 'b') from Member m"; +// String query = "select substring(m.name, 2, 3) from Member m"; +// String query = "select locate('he', m.name) from Member m"; +// String query = "select size(t.members) from Team t"; +// String query = "select function('group_concat', m.name) from Member m"; + String query = "select group_concat(m.name) from Member m"; + + List result = em.createQuery( + query, + String.class + ) + .getResultList(); + +// List result = em.createQuery( +// query, +// Integer.class +// ) +// .getResultList(); + + result.forEach(System.out::println); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + e.printStackTrace(); + } finally { + em.close(); + } + + emf.close(); + } +} diff --git a/hello-jpa/src/main/java/com/hello/jpa/query/dialect/MyH2Dialect.java b/hello-jpa/src/main/java/com/hello/jpa/query/dialect/MyH2Dialect.java new file mode 100644 index 00000000..2e2a3b1d --- /dev/null +++ b/hello-jpa/src/main/java/com/hello/jpa/query/dialect/MyH2Dialect.java @@ -0,0 +1,12 @@ +package com.hello.jpa.query.dialect; + +import org.hibernate.dialect.H2Dialect; +import org.hibernate.dialect.function.StandardSQLFunction; +import org.hibernate.type.StandardBasicTypes; + +public class MyH2Dialect extends H2Dialect { + + public MyH2Dialect() { + registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING)); + } +} diff --git a/hello-jpa/src/main/resources/META-INF/persistence.xml b/hello-jpa/src/main/resources/META-INF/persistence.xml index 92e26bf5..8485b89b 100644 --- a/hello-jpa/src/main/resources/META-INF/persistence.xml +++ b/hello-jpa/src/main/resources/META-INF/persistence.xml @@ -49,7 +49,7 @@ - +