인프런 커뮤니티 질문&답변

Sunghyuk Lee님의 프로필 이미지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

JPQL 함수

registerFunction() 쓸수 없음

해결된 질문

22.07.30 16:39 작성

·

1K

0

1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
registerFunction()을 쓸수 없습니다. 참고로 하이버네이트는 6.0.0.Alpha 7버전을 쓰고 있구요. 혹시라해서 버전을 5.6.10.Final로 바꾸면 쓸수 있더라구요. JPA공부하면서 6.0.0.Alpha 7버전을 쭉 쓰고 있는데 그런데 문제는 한 번도 안 생겼어요. 이 부분에서 궁금한점은 요즘에 JPAL함수 이렇게 사용 안 하시나요? 버전별H2Dialect클래스에 들어가면 이부분이 많이 바꿔있더라구요. 그래서 실무에서는 보통 final버전만 쓰는 건가요? 물론 강의는 2019년 기준이라서 그때는 alpha버전 없지만. 햇갈리네요^^. 저는 최신버전이면 쓰는 것이 좋을것 같아서. 그리고 alpha버전은 도데체 정식 버전인가요. 아니면 테스트중인 버전인가요.

답변 2

1

이주안님의 프로필 이미지

2023. 08. 30. 08:49

저도 같은 문제 있었는데 다음과 같이 migration 하니 되네요 참고하시길.

MyH2Dialect.class

public class MyH2Dialect extends H2Dialect {

    @Override
    public void contributeFunctions(FunctionContributions functionContributions) {
        functionContributions
                .getFunctionRegistry()
                .register("group_concat",
                        new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
    }

}

근데 이외에도 Member에 @Id @GeneratedValue(strategy = GenerationType.IDENTITY)로 고치고, persistence.xml을 다음과 같이 고쳐야 됩니다.

Member.class

@Entity
@Getter
@Setter
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    // 이하 생략
}

persistence.xml

<property name="hibernate.dialect" value="hellojpa.dialect.MyH2Dialect"/>

 

또한 pom.xml에 hibernate-entitymanager dependency를 5.6.15.Final 버전 추가해줬습니다.

h2 버전은 2.2.220 사용했습니다.

 

1

OMG님의 프로필 이미지

2022. 07. 31. 09:18

안녕하세요. Sunghyuk Lee님, 공식 서포터즈 OMG입니다.

메이저버전이 바뀔 때 큰 변화가 있는 편인데 JPQL 이랑 H2에서 변화가 있었나 보네요.

강의 수강은 5.x로 진행해주세요.

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>jpa-basic</groupId>
    <artifactId>ex1-hello-jpa</artifactId>
    <version>1.0.0</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>
                    8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.4.29.Final</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>        <!-- logback -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>
</project>

 

실무에서는 안정화된 release 버전을 사용합니다.

알파 버전은 개발 초기에 있어 성능이나 사용성 등을 평가하기 위한 테스터나 개발자를 위한 버전입니다.

 

감사합니다.

Sunghyuk Lee님의 프로필 이미지
Sunghyuk Lee
질문자

2022. 08. 03. 11:52

감사합니다. ^^