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

아리마님의 프로필 이미지
아리마

작성한 질문수

실전! Querydsl

질문 남기고 가요.

작성

·

284

0

영한님, 안녕하세요.

여기서도 또 뵙게 됐네요.

아직 강의는 30% 정도 수강한 상태이지만, 앞 서서 질문드립니다.

1. function 을 사용하여 replace 활용을 보여주셨는데요. 제가 MariaDB 를 사용 중인데

MariaDB 의 Dialect 에는 강의에서 보여주신 H2Dialect 처럼 fucntion 들이 없는 것 같더라고요..

replace 같은 기본 기능들을 Maria 에서는 활용할 수 없는 것인지요? 

2.  SQL 에 Enum 의 Value 를 담는 것이 가능한지요? 

concat 설명 하실 때,  Enum 사용하게 되면  stringValue() 떠오르실거다 라고 짧게 말씀하시고 넘어가셨는데

이와 연관이 있을까요?

아무튼 SQL 에 Enum 코드말고 Value 를 담을 수 있는 지 궁금합니다.

답변 3

0

김영한님의 프로필 이미지
김영한
지식공유자

확인해보니 MariaDBDialect에는 정말 replace가 없군요!

이런 경우 사용하는 MariaDBDialect를 상속받은 클래스를 직접 만들고, 다음과 같은 함수 등록 코드를 직접 만든 클래스에 등록을 해주셔야 합니다.

(등록하지 않은 함수는 호출할 수 없습니다.)

registerFunction( "replace", new StandardSQLFunction( "replace", StandardBasicTypes.STRING ) );

그리고 직접 만든 Dialect를 application.yml에 등록하시면 됩니다.

(등록 방법은 spring boot hibernate dialect 키워드를 구글에 검색해보세요^^)

그리고 두번째로 Enum은 답변해주신 내용을 자세히 보니 제가 생각했던, ENUM안에 CODE, VALUE가 있는 개념을 질문하신게 아니었군요. 질문하신 내용은 별도의 코드 테이블을 운영하고 있을 때에 관한 질문이셨군요.

엔티티로 조회하면 안되겠지만, DTO로 조회하면 JPQL처럼 Querydsl도 가능합니다. 단순히 코드 테이블을 LEFT 조인하고, select 절에서 조인된 Value를 찍어서 가져오면 됩니다^^

0

아리마님의 프로필 이미지
아리마
질문자

영한님

MariaDBDialect 의 부모클래스를 따라가면 MySqlDialect 를 찾을 수 있는데

replace 는 찾을 수가 없네요. 영한님처럼 코딩을 해도 오류가 발생하고요..

MySql 에서 Replace 를 지원하는데 왜 사용할 수가 없을까요 ㅠ

그리고 Enum 의 경우, 

말씀해 주신 Converter 는 DB 에서 관리하는 코드 형태에 차이가 있을 경우 사용하는 듯 한데요.

저는 단순히 Select 결과절 을 화면에 출력시켜줄 때,  Code 말고 Value 를 쉽게 출력시켜줄 수 있는 방법이

QueryDsl 에 있을까해서 질문을 드려봤습니다. 아마도 없겠죠..

저는 영한님 강좌에서 Enum 을 알게 됐는데

보통 코드를 Enum 형태가 아닌 DB에 구성하게 되면 Select 절에서 LeftJoin 을 통해 Value 를 쉽게 얻어올 수가 있는데

Enum 은 Select 절 결과로 DTO 에 바로 담지 못하고 별도의 부가 처리를 해야 되는 것이

좀 귀찮게 느껴졌습니다.  이건 어쩔 수 없는 거겠죠?

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요 아리마님^^
1번은 MariaDBDialect의 부모 클래스를 따라가보시면 있을꺼에요^^

2번은 JPA책 14.2 @Converter 를 보시거나, jpa AttributeConverter를 검색해보면 원하시는 답을 찾을 수 있을꺼에요.

감사합니다

아리마님의 프로필 이미지
아리마

작성한 질문수

질문하기