2017-06-21 9 views
1

休止状態のdocumentationカスタムタイプはConfigurationインスタンスを使用して登録されています。どのように私はこのインスタンスにアクセスして、春のブートを使用して自分のタイプを登録できますか?スプリング・ブートを使用してカスタム・ハイバネート・タイプを登録するには?

エンティティの@TypeDefを使用すると、正常に動作しますが、JPAネイティブクエリで私が手"javax.persistence.PersistenceException: org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111"

それは私自身の方言で動作し、registerHibernateTypeを経由して登録するが、列に登録された一つだけのカスタムタイプタイプ.OTHER(JDBCタイプ1111)。他のカスタムタイプの登録は、古いものを上書きします。

クエリは単純で、指定されたカスタムタイプの定数値のみを選択します。

hibernate 5.0.9とspring boot 1.4.0を使用しています。

答えて

0

結果がカスタムタイプに自動的にマッピングされていないようです。

返されるjdbc PGObjectには、列の型名(ex: 'tsvector')が含まれていますが、hibernateカスタム型はdb型名ではなくSQL型(この場合はOTHER)しか認識しません。試合をする。機構がないとして、これはQueryDSL(4.1.4)に影響を与えること

Query query = entityManager.createNativeQuery("SELECT <SOMETHING> AS res"); 
query.unwrap(SQLQuery.class).addScalar("res", CustomHibernateType.INSTANCE); 

注:

この問題を回避するには、元の(カスタムタイプを休止状態)JPAネイティブクエリのラップを解除し、返されたスカラ型を登録することですスカラーをハイバネートカスタムタイプとして登録すると、jpaネイティブクエリーが失敗します(JPASQLQuery)。この場合の回避策は、QueryDSLに登録されたAbstractTypeの非jpaネイティブクエリを使用することです。この変換は自動的に行われます。

関連する問題