Hibernate

[Errore] Caused by: org.hibernate.DuplicateMappingException: Duplicate collection {nome collection} mapping

Partendo dalla situazione in cui ho:

  • STS 2.3.2 con Eclipse 3.5
  • JBoss tools 2.0.2
  • Mi trovo nella vista HIBERNATE

e

  • Fatto il reverse engeenering del mio DB con JBoss Tools
  • Configurato JBoss tools in modo che sappia:
    • i parametri di connessione al DB
    • Il path e il nome del file hibernate.cfg.xml che non è altro che lo stesso creato precedentemente dal reverse engeneering
    • importato nella sezione Mappings di configurations, tutti i file hbm.xml che sono stati creati dal reverse engeneeing (che poi non sono altro le il mappaggio delle mie classi java)

Quando cerco di vedere il risultato della configurazione per poter eseguire una query con l’editor HQL. Ho il seguente errore:

Error Caused by: org.hibernate.DuplicateMappingException: Duplicate collection {nome collection} mapping

Questo errore nel mio caso è dovuto al fatto che vi era un riferimento duplicato per i file  hbm.xml infatti se li importo tramite la configurazione nella sezione Mappins non possono essere presenti anche nel file hibernate.cfg.xml.

Perciò per risolvere il problema basterà cancellare la lista di file hbm.xml dentro il file hibernate.cfg.xml e finalmente potrete utilizzare l’editor HQL

Annunci
Dojo, Javascript, JQuery, JQuery UI, ROO

[Guida] Utilizzare JQuery 1.4.2 & JQuery UI 1.8.2 & Dojo su ROO

Non è semplice (almeno alla prima botta) utilizzare JQuery 1.4.2 insieme a JQuery UI 1.8.2 in un progetto dove è già presente il framework Dojo.

Nel mio caso il progetto era stato creato su Roo 1.0.2. con il nome di pizzashop

Per inserire JQuery è necessario modificare la pagina “default.jspx” che si trova nella cartella layout

Qui riporto la parte dell’HEAD che deve essere modificato:

<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<meta http-equiv=”X-UA-Compatible” content=”IE=8″ />
<spring:theme code=”styleSheet” var=”roo_css”/>
<spring:url value=”/${roo_css}” var=”roo_css_url”/>
<spring:url value=”/resources/dojo/dojo.js” var=”dojo_url”/>
<spring:url value=”/resources/dijit/themes/soria/soria.css” var=”soria_url”/>
<spring:url value=”/resources/spring/Spring.js” var=”spring_url”/>
<spring:url value=”/resources/spring/Spring-Dojo.js” var=”spring_dojo_url”/>
<spring:url value=”/static/images/fir.ico” var=”favicon” />
<link rel=”stylesheet” type=”text/css” media=”screen” href=”${roo_css_url}”><!– //required for FF3 and Opera –></link>
<link rel=”stylesheet” type=”text/css” href=”${soria_url}”><!– //required for FF3 and Opera –></link>
<link rel=”SHORTCUT ICON” href=”${favicon}” />
<script type=”text/javascript”><![CDATA[
function readCookie(name) {
var nameEQ = name + ‘=’;
var ca = document.cookie.split(‘;’);
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==’ ‘) c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
var djConfig={locale:readCookie(‘locale’)};
]]>
</script>
<script src=”${dojo_url}” type=”text/javascript” > //required for FF3 and Opera –></script>
<script src=”${spring_url}” type=”text/javascript”> //required for FF3 and Opera –></script>
<script src=”${spring_dojo_url}” type=”text/javascript”> //required for FF3 and Opera –></script>
<script language=”JavaScript” type=”text/javascript”>jQuery.noConflict();</script>
<script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js&#8221; language=”JavaScript”></script>
<script language=”JavaScript” type=”text/javascript”>jQuery.noConflict();</script>
<script language=”JavaScript” type=”text/javascript”>dojo.require(“dojo.parser”);</script>
<spring:message code=”application.name” var=”app_name”/>
<title><spring:message code=”welcome.h3″ arguments=”${app_name}” /></title>
</head>
Il trucco stà nell’inserire dopo l’importazione di ognuna delle librerie JQUERY la notazione <script language=”JavaScript” type=”text/javascript”>jQuery.noConflict();</script> , infatti senza questa notazione il browser noterà solo la prima importazione.


Hibernate, Mysql, ROO, Spring, tc Server
Questa guida vuole essere un piccolo punto di riferimento per la costruzione di un DataSource all’interno dell’ambiente tc Server di Spring Tool Suite, nella fattispecie utilizzando Mysql 5 come DB e Hibernate come Framework per la persistenza.
La Guida è stata testa sia per STS 2.3.2 che per STS 2.3.3

Cambiamenti da effettuare all’interno di:

Server > [SpringSource tc Server v6.0-config | SpringSource tc Developer 2.0 ] (files che si trovano dentro il workspace, creati automaticamente da STS 2.3.2)

context.xml:
All’interno del tag <Context>

<Resource     name="${Nome data source}” 
                auth="Container" 
                type="javax.sql.DataSource" 
                  maxActive="10" 
                  maxIdle="10" 
                  maxWait="10000" 
                  username="root" 
                  password="root" 
                  driverClassName="com.mysql.jdbc.Driver" 
                url="jdbc:mysql://localhost:3306/${nome database utilizzato}"/>

server.xml
Dentro il tag <GlobalNamingResources>

<Resource     name="${Nome data source} 
                auth="Container" 
                type="javax.sql.DataSource" 
                  maxActive="10" 
                  maxIdle="10" 
                  maxWait="10000" 
                  username="root" 
                  password="root" 
                  driverClassName="com.mysql.jdbc.Driver" 
                url="jdbc:mysql://localhost:3306/${nome database utilizzato}"/>

web.xml
Subito dopo il tag <webapp>

    <description>MySQL Test App</description>
      <resource-ref>
          <description>DB Connection Mysql</description>
          <res-ref-name>${nome datasource}</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
      </resource-ref>

PS: il nome del datasource deve essere sempre lo stesso



Cambiamenti da effettuale all’interno del nostro progetto:

web.xml
Subito dopo il tag <webapp>

    <description>MySQL Test App</description>
      <resource-ref>
          <description>DB Connection Mysql</description>
          <res-ref-name>${nome datasource}</res-ref-name>
          <res-type>javax.sql.DataSource</res-type>
          <res-auth>Container</res-auth>
      </resource-ref>

PS: il nome del datasource deve essere sempre lo stesso


Nella cartella che contiene il server (es: /opt/springsource/tc server 6)

Inserire i driver JDBC connector nella cartella TOMCAT\lib (nel caso di Developer 2)

Inserire i driver JDBC connector nelle cartelle webapps-lib e lib (nel caso di Server v6.0)

Maven, ROO, Spring

[Errore] applicationContext-security.xml –> Sul tag <http auto-config="false" ….

Se il file applicationContext-security.xml contiene al suo interno un errore all’altezza del tag

<http auto-config=”false” use-expressions=”true” entry-point-ref=”loginUrlAuthenticationEntryPoint”>

con il seguente errore

Static factory method ‘createSingleAttributeList’ with 1 arguments not found in factory bean class
‘org.springframework.security.access.SecurityConfig’

Basterà aggiornate le librerie del pom.xml relative ai jar

  • org.springframework.security.core
  • org.springframework.security.config
  • org.springframework.security.web
  • org.springframework.security.taglibs

Dalla versione 3.0.0 alla versione 3.0.2; ed eseguire un clean del progetto con successivo build in modo che prenda coscienza dei nuovi package.

Hibernate, Mysql

[Hibernate + mysql] Errore “Found longblob expected blob”

Se trovate l’errore segnalato in grassetto in cui hibernate va in errore visto che si aspetta di trovare nella tabella un campo LONGBLOB, mentre invece la classe entity definisce un BLOB.

GRAVE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘transactionManager’ defined in file [/opt/STS 2.3.2/tc-server-6.0.20.C/wtpwebapps/GestioneFIR/WEB-INF/classes/META-INF/spring/applicationContext.xml]
….
….
Caused by: org.hibernate.HibernateException: Wrong column type in gestione_fir.categoria for column regolamento_xml.
Found: longblob, expected: blob at org.hibernate.mapping.Table.validateColumns(Table.java:261)