[SPRING] JPA와 Hibernate로 SQL 함수 등록하기
SPRINGJPA와 Hibernate로 SQL 함수 등록하기
JPA / Hibernate로 사용자 정의 SQL 함수를 등록하는 가장 좋은 방법은 무엇인지 알고 싶습니다.
MysqlInnodb 방언을 확장해야합니까 아니면 더 좋은 방법이 있습니까?
누구든지 코드 샘플과 관련 문서에 대한 포인터를 제공 할 수 있습니까?
해결법
-
==============================
1.그렇습니다. Dialect를 확장하는 것은 커스텀 SQL 함수를 등록하는 좋은 방법입니다.
그렇습니다. Dialect를 확장하는 것은 커스텀 SQL 함수를 등록하는 좋은 방법입니다.
Dialect 클래스 생성자에서 이와 비슷한 것을 추가하십시오.
registerFunction("current_timestamp", new NoArgSQLFunction(Hibernate.TIMESTAMP) ); registerFunction("date", new StandardSQLFunction(Hibernate.DATE) );
기존의 방언 클래스 중 하나의 소스 코드를 살펴보십시오. http://www.koders.com/java/fid0E7F787E2EC52F1DA8DFD264EDFBD2DE904A0927.aspx
-
==============================
2.이 기사에서 설명했듯이, Hibernate ORM 5.2.18과 5.3.1 이후 SQL 함수를 등록하는 가장 좋은 방법은 다음과 같이 MetadataBuilderContributor를 제공하는 것이다.
이 기사에서 설명했듯이, Hibernate ORM 5.2.18과 5.3.1 이후 SQL 함수를 등록하는 가장 좋은 방법은 다음과 같이 MetadataBuilderContributor를 제공하는 것이다.
public class SqlFunctionsMetadataBuilderContributor implements MetadataBuilderContributor { @Override public void contribute(MetadataBuilder metadataBuilder) { metadataBuilder.applySqlFunction( "group_concat", new StandardSQLFunction( "group_concat", StandardBasicTypes.STRING ) ); } }
hibernate.metadata_builder_contributor 구성 등록 정보를 통해 Hibernate에 전달할 수있는 값은 다음과 같습니다.
<property> name="hibernate.metadata_builder_contributor" value="com.vladmihalcea.book.hpjp.hibernate.query.function.SqlFunctionsMetadataBuilderContributor" </property>
또는 Hibernate를 기본적으로 부트 스트랩하는 경우, 부트 스트랩 중 SQL 함수를 MetadataBuilder에 적용하면됩니다.
-
==============================
3.모든 버전의 SQL 메소드 등록
모든 버전의 SQL 메소드 등록
//Add Hibernate Properties properties.put("hibernate.dialect", "com.sparkslink.web.config.sql.RegisterSqlFunction"); //Create A Class public class RegisterSqlFunction extends MySQLDialect { public RegisterSqlFunction() { super(); registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING)); } } //Dao Method public List<Client> getTest() { Query query = getSession() .createQuery("SELECT sl.name as name ,group_concat(sl.domain) as domain FROM SlClient sl GROUP BY sl.name"); query.setResultTransformer(Transformers.aliasToBean(Client.class)); return query.list(); } //DTO Class public class Client { private String name; private String domain; //Getter //Setter }
from https://stackoverflow.com/questions/12346845/registering-a-sql-function-with-jpa-and-hibernate by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Google App Engine에서 봄 보안 구현 (0) | 2019.05.11 |
---|---|
[SPRING] Spring 프로파일을 패키지로 설정하는 방법은? (0) | 2019.05.11 |
[SPRING] 400 Hibernate @Valid가있는 잘못된 요청 (0) | 2019.05.11 |
[SPRING] Spring을 초기화 할 때 NullPointerException이 발생하는 이유는 무엇입니까? (0) | 2019.05.11 |
[SPRING] 다른 Spring 컨텍스트간에 Spring 빈을 어떻게 공유합니까? (0) | 2019.05.11 |