4

次の JPA SqlResultSetMapping があります。

 @SqlResultSetMappings({               
    @SqlResultSetMapping(name="GroupParticipantDTO", 
            columns={ 
                @ColumnResult(name="gpId"),
                @ColumnResult(name="gpRole"),
 //             @ColumnResult(name="gpRemarks")
            }  
    )

これは次のように使用されます:

    StringBuilder sbQuery = new StringBuilder("Select  ");
    sbQuery.append(" gpId, ");
    sbQuery.append(" gpRole, "); 
 // sbQuery.append(" gpRemarks ");

    sbQuery.append(" FROM v_group_participants_with_details ");

    Query query = em.createNativeQuery(sbQuery.toString(), "GroupParticipantDTO");

ビューは次のようになります。

DROP VIEW IF EXISTS `v_group_participants_with_details`;
CREATE VIEW `v_group_participants_with_details`
AS
SELECT
   gp.id AS gpId,
   gp.role AS gpRole,
   gp.remarks AS gpRemarks
FROM GroupParticipation gp
;

GroupParticipation テーブルには、LONGTEXT として定義されたコメント列があります (Mysql 5.x を使用しています)。

問題は次のとおりです。コメント フィールドがクエリからコメント アウトされている場合、すべてが完全に機能しますが、クエリにコメント フィールドを含めようとすると、次のエラーが発生します。

 javax.persistence.PersistenceException: org.hibernate.MappingException: 
 No Dialect mapping for JDBC type: -1   
 at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException
 (AbstractEntityManagerImpl.java:614)   
 at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76)

何を与える?ネイティブ クエリから LONGTEXT 列を取得するにはどうすればよいですか?

4

1 に答える 1

7

この問題は、HHH-1483およびHHH-3892で報告されています。LONGVARCHARつまり、Hibernateは、ネイティブクエリによって返された列をマップする方法を知りません。

この問題はHibernate3.5.0以降で修正されています。以前のバージョンの場合、回避策は、を拡張して、:MysqlDialectの正しいHibernateを登録することです。TypeLONGVARCHAR

import java.sql.Types;

import org.hibernate.Hibernate;

public class MyMySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect {
    public MyMySQL5Dialect() {
        super();
        // register additional hibernate types for default use in scalar sqlquery type auto detection
        registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName());
    }
}
于 2010-08-07T00:01:30.230 に答える