#30 jpa basic: jpql - function

This commit is contained in:
haerong22
2023-02-05 03:38:11 +09:00
parent 9c8ecdc113
commit 114bb71492
3 changed files with 91 additions and 1 deletions

View File

@@ -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<String> result = em.createQuery(
query,
String.class
)
.getResultList();
// List<Integer> 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();
}
}

View File

@@ -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));
}
}

View File

@@ -49,7 +49,7 @@
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<!-- <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:~/testdb"/>-->
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.dialect" value="com.hello.jpa.query.dialect.MyH2Dialect"/>
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true"/>