나는이 질문을 타이핑하면서 대답을 알아 냈다. Hibernate는 결과를 문자열 대신 문자로 해석하여 'H'만 반환하는 것처럼 보입니다.
이 문제를 해결하기 위해 발견 된 방법은 select 문에 열 별칭을 추가 한 다음 addScalar(String columnAlias, Type type)을 사용하여 결과를 String으로 해석하도록 지정하는 것입니다.
다시 말하면 ResultTransformer (AliasToEntityMapResultTransformer)를 사용하여 결과에 열 이름과 내용이 포함될 수 있지만 꼭 필요한 것은 아닙니다.
왜 Hibernate가 결과를 문자열이 아닌 문자로 매핑하는지 또는 결과를 문자열로 강제하는 다른 방법 (더 쉬운 방법)을 제안하려는 경우 확장하고 싶다면 주석을 달거나 답변을 게시하십시오.
package serialize
import org.hibernate.cfg.Configuration
import org.hibernate.transform.AliasToEntityMapResultTransformer
import org.hibernate.type.StringType
class SerializeDatabaseObjects {
static main(args) {
def sessionFactory = initHibernate()
def session = sessionFactory.openSession()
def tx
def result
try {
tx = session.beginTransaction()
result = session
.createSQLQuery("""Select 'Hello World!' as hello from dual""")
.addScalar("hello", new StringType())
.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE)
.list()
tx.commit()
}
catch (Exception e) {
if (tx!=null){
tx.rollback()
}
throw e
}
finally {
session.close()
}
println result
sessionFactory.close()
}
static initHibernate(){
return new Configuration().configure().setProperty("hibernate.show_sql", "true").buildSessionFactory()
}
}
출력 :
Hibernate: Select 'Hello World!' as hello from dual
[[hello:Hello World!]]
여기
예상 된 결과를 생성하는 코드