[Java/Hibernate] Missende JDBC-types

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig om m.b.v. Hibernate in Java een webapplicatie te maken om simpel projectmanagement mee uit te voeren. Nu heb ik mooi alles zo geprogrammeerd dat ie de POJO's etc. goed verwerkt.

Er zijn uiteraard ook zaken die je niet m.b.v. POJO's al dan niet i.c.m. HQL kunt oplossen. Dit geeft nogal wel eens wat problemen. Zo komt het voor dat als je kolom type 'TEXT' is je Hibenate gaat flippen. Ik heb het nu dus in ieder geval voor elkaar om een 'SELECT *' uit te voeren in standaard SQL door alle 'TEXT' te vervangen door 'VARCHAR(N)'. Nu kom ik dus bij het volgende:

code:
1
2
3
4
List todoItems = (session.createSQLQuery(
                "SHOW FULL COLUMNS FROM todo_items")
                .list()
                );


Daar begint hij dus ook weer te flippen, zonder dat de trace echt duidelijke informatie over de fout geeft.

Mijn vraag is dus: Hoe kom ik er sowieso achter wat de types zijn die hij met een SHOW FULL ophaalt en hoe zou ik dat eventueel kunnen manipuleren.

De reden dat ik overigens graag die kolommetadata wil hebben is omdat ik het erg a-relaxed vind om dubbel - en dus foutgevoelig bij veranderingen - de types te definiëren.

De stacktrace:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
No Dialect mapping for JDBC type: -1
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:81)
    at org.hibernate.dialect.Dialect.getHibernateTypeName(Dialect.java:370)
    at org.hibernate.loader.custom.CustomLoader$Metadata.getHibernateType(CustomLoader.java:559)
    at org.hibernate.loader.custom.CustomLoader$ScalarResultColumnProcessor.performDiscovery(CustomLoader.java:485)
    at org.hibernate.loader.custom.CustomLoader.autoDiscoverTypes(CustomLoader.java:501)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1796)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
    at model.DAO.GeneralDAO.getColumnMetaData(GeneralDAO.java:133)
    at model.DAO.GeneralDAO.getAllColumnData(GeneralDAO.java:93)
    at utils.pages.ContentFactory.getCreateItem(ContentFactory.java:73)
    at utils.pages.PageFactory.createContent(PageFactory.java:30)
    at utils.pages.PageBuilder.addContent(PageBuilder.java:73)
    at utils.pages.PageBuilder.(PageBuilder.java:41)
    at controller.CreateItem.handleRequest(CreateItem.java:63)
    at org.apache.velocity.servlet.VelocityServlet.doRequest(VelocityServlet.java:365)
    at org.apache.velocity.servlet.VelocityServlet.doGet(VelocityServlet.java:318)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat vergat ik er bij te vermelden:

dan kan ik hopelijk

http://www.docjar.com/htm...ct/MySQLDialect.java.html

aanpassen

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
Verwijderd schreef op maandag 27 april 2009 @ 13:10:
De stacktrace:
code:
1
2
3
No Dialect mapping for JDBC type: -1
org.hibernate.MappingException: No Dialect mapping for JDBC type: -1
    at org.hibernate.dialect.TypeNames.get(TypeNames.java:56)
Type -1 is LONGVARCHAR Dit had je overigens ook zelf kunnen opzoeken in de broncode van java.sql.Types

[ Voor 58% gewijzigd door Remus op 27-04-2009 13:46 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dat had ik eerlijk gezegd nog niet bedacht aangezien ik nog in de Hibernate-hoek zat te zoeken. Daarom stel ik de vraag :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yeah, kassa.

Via een hele lelijke omweg.

Ik bedacht me plots dat ik best met PHPMYADMIN even kon zoeken naar de COLUMNS-kolom en dat SHOW gebeuren even te vergeten. Die ging ook weer fouten geven bij het selecten. Wel was het even makkelijker om specifiek COLUMN_TYPE uit die tabel aan te roepen. Nu kon ik zelf het type manipuleren d.m.v. addScalar(columnname, columnType):

Resultaat

code:
1
2
3
4
5
List developer = (session.createSQLQuery(
                "SELECT COLUMN_TYPE FROM information_schema.COLUMNS WHERE `TABLE_NAME` LIKE '" + classname + "'" )
                .addScalar("COLUMN_TYPE", Hibernate.STRING)
                .list()
                );


addScalar was dus de 'manipulatie' waar ik naar zocht. Voorlopig opgelost dus :)

[ Voor 9% gewijzigd door Verwijderd op 27-04-2009 15:09 ]