Hibernate/JPA(EntityManager)

[JPA] JPQL 및 queryDSL 사용자정의 함수 등록법 (MySql)

유혁스쿨 2023. 6. 21. 12:45
728x90
반응형
public class UserFunctionDialect extends MySQLDialect {

    /** 생성자를 통해 등록한다. 등록법은 MySQLDialect 클래스를 참조한다. */
    public UserFunctionDialect() {
        registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
    }
}
public class JpqlLv1 {
    @PersistenceContext
    EntityManager em;
    
    @BeforeEach
    public void before() {
        Team teamA = new Team("teamA");
        Team teamB = new Team("teamB");
        em.persist(teamA);
        em.persist(teamB);
        Member member1 = new Member("Member1", 10, teamA);
        Member member2 = new Member("Member2", 20, teamA);
        Member member3 = new Member("Member3", 30, teamB);
        Member member4 = new Member("Member4", 40, teamB);
        em.persist(member1);
        em.persist(member2);
        em.persist(member3);
        em.persist(member4);
    }
        
    
    @Test
    public jpqlUserFunction() {
        

        List<String> functionResult = em.createQuery("select function('group_concat', m.username) from Member m", String.class).getResultList();
        for (String s : functionResult) {
            System.out.println("s = " + s);
        }
        
        JPAQueryFactory queryFactory = new JPAQueryFactory(em);
        
    }
    @Test
    public querydslUserFunction() {
        JPAQueryFactory queryFactory = new JPAQueryFactory(em);
        List<String> result = queryFactory
                .select(
                        Expressions
                        .stringTemplate("function('group_concat')", member.username) //와일드카드 사용 불가능
                ).from(member)
                .fetch();
        for (String s : result) {
            System.out.println("s = " + s);
            
        }
        
        
        
    }
}
728x90
반응형