-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Struts - Hibernate Integration problems
PostPosted: Tue Apr 03, 2007 6:02 am 
Newbie

Joined: Mon Mar 19, 2007 6:15 pm
Posts: 19
Location: Bilbao (Spain)
Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp

Hibernate version: 3.2

Mapping documents:

Media.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" default-lazy="false">

<!-- Indicamos la clase a persistir y la tabla a la que corresponde-->
<class name="com.mimetics.beans.Media" table="media">

<!-- Especificamos la clave primaria -->
<id name="mediaId" type="java.lang.Long" column="media_id">
<generator class="native"/>
</id>

<!-- A continuación el resto de atributos -->
<property name="fileName" type="java.lang.Long" column="filename" not-null="true" length="255"/>
<property name="size" type="java.lang.Long" column="file_size" not-null="true"/>
<property name="sizeMb" type="java.lang.Integer" column="file_size_mb" not-null="true"/>
<property name="path" type="java.lang.String" column="path" not-null="true" length="255"/>
<property name="description" type="java.lang.String" column="description" not-null="false"/>
<property name="views" type="java.lang.Long" column="views" not-null="true" />
<property name="title" type="java.lang.String" column="title" not-null="false" length="255"/>
<property name="tags" type="java.lang.String" column="tags" not-null="false" length="255"/>
<property name="uploadDate" type="java.util.Date" column="upload_date" not-null="true"/>

<many-to-one name="mediaType" class="com.mimetics.beans.MediaType"
foreign-key="fk_media_media_types" unique="true" column="type" not-null="true" />

<many-to-one name="owner" class="com.mimetics.beans.User" lazy="proxy"
foreign-key="fk_media_users" column="owner" not-null="true" insert="false" update="false"/>

<set name="receivedComments" lazy="true">
<key not-null="true" column="media_id"/>
<one-to-many class="com.mimetics.beans.Comment" />
</set>

</class>
</hibernate-mapping>

MediaType.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" default-lazy="false">

<!-- Indicamos la clase a persistir y la tabla a la que corresponde-->
<class name="com.mimetics.beans.MediaType" table="media_types">

<!-- Especificamos la clave primaria -->
<id name="mediaTypeId" type="java.lang.Integer" column="type_id">
<generator class="native"/>
</id>

<!-- A continuación el resto de atributos -->
<property name="mediaTypeName" type="java.lang.String" column="type_name" not-null="true"/>
</class>
</hibernate-mapping>

User.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping auto-import="true" default-lazy="false">
<class name="com.mimetics.beans.User" table="users">
<id name="email" type="java.lang.String" column="email">
<generator class="native"/>
</id>
<property name="name" type="java.lang.String" column="name" not-null="true" length="45"/>
<property name="surname" type="java.lang.String" column="surname" not-null="true" length="45"/>
<property name="country" type="java.lang.String" column="country" not-null="true" length="255"/>
<property name="nickname" type="java.lang.String" column="nickname" not-null="true" length="45"/>
<property name="password" type="java.lang.String" column="password" not-null="true" length="12"/>
<many-to-one name="userPreferences" class="com.mimetics.beans.UserPreferences"
foreign-key="fk_user_user_preferences" column="preferences" not-null="true"/>
<many-to-one name="userType" class="com.mimetics.beans.UserType"
foreign-key="fk_user_user_types" column="type" not-null="true"/>

<!-- Collection Sets -->
<set name="uploadedMedia" inverse="true" lazy="true">
<key not-null="true" column="owner"/>
<one-to-many class="com.mimetics.beans.Media"/>
</set>

<!-- SENT & RECEIVED MESSAGES -->
<set name="sentMessages" table="messages" lazy="true">
<key not-null="true" column="from"/>
<one-to-many class="com.mimetics.beans.Message"/>
</set>
<set name="receivedMessages" table="messages" lazy="true">
<key not-null="true" column="to"/>
<one-to-many class="com.mimetics.beans.Message"/>
</set>

<set name="postedComments" lazy="true">
<key not-null="true" column="email"/>
<one-to-many class="com.mimetics.beans.Comment" />
</set>
</class>
</hibernate-mapping>

UserType.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" default-lazy="false">

<!-- Indicamos la clase a persistir y la tabla a la que corresponde-->
<class name="com.mimetics.beans.UserType" table="user_types">

<!-- Especificamos la clave primaria -->
<id name="userTypeId" type="java.lang.Integer" column="type_id">
<generator class="native"/>
</id>

<!-- A continuación el resto de atributos -->
<property name="userTypeName" type="java.lang.String" column="type_name" not-null="true"/>
<many-to-one name="userPrivileges" class="com.mimetics.beans.UserPrivileges" column="privileges" unique="true"/>
</class>
</hibernate-mapping>

UserPreferences.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping auto-import="true" default-lazy="false">
<class name="com.mimetics.beans.UserPreferences" table="user_preferences">
<id name="userPreferencesId" type="java.lang.Long" column="preference_id">
<generator class="native"/>
</id>
<property name="toolboxOrder" type="java.lang.String" not-null="true" column="toolbar_order"/>
<property name="rbarOrder" type="java.lang.String" not-null="true" column="rbar_order"/>
<property name="showComments" type="java.lang.Boolean" not-null="true" column="show_comments"/>
<property name="showEmail" type="java.lang.Boolean" not-null="true" column="show_email"/>
</class>
</hibernate-mapping>

UserPrivileges.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" default-lazy="false">

<!-- Indicamos la clase a persistir y la tabla a la que corresponde-->
<class name="com.mimetics.beans.UserPrivileges" table="user_privileges">

<!-- Especificamos la clave primaria -->
<id name="privilegeId" type="java.lang.Long" column="privilege_id">
<generator class="native"/>
</id>

<!-- A continuación el resto de atributos -->
<property name="convertVideo" type="java.lang.Boolean" column="convert_video" not-null="true"/>
<property name="convertAudio" type="java.lang.Boolean" column="convert_audio" not-null="true"/>
<property name="convertImage" type="java.lang.Boolean" column="convert_image" not-null="true"/>
<property name="conserveFiles" type="java.lang.Boolean" column="conserve_files" not-null="true"/>
<property name="maxFSize" type="java.lang.Long" column="max_fsize" not-null="true" />
<property name="canSendMsg" type="java.lang.Boolean" column="can_send_msg" not-null="true"/>
</class>
</hibernate-mapping>

Comment.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="true" default-lazy="false">

<!-- Indicamos la clase a persistir y la tabla a la que corresponde-->
<class name="com.mimetics.beans.Comment" table="comments">

<!-- Especificamos la clave primaria -->
<id name="commentId" type="java.lang.Long" column="comment_Id">
<generator class="native"/>
</id>

<!-- A continuación el resto de atributos -->
<property name="text" type="java.lang.String" column="comment_text" not-null="true" length="255"/>
<property name="postDate" type="java.util.Date" column="post_date" not-null="true" length="255"/>
</class>
</hibernate-mapping>


Code between sessionFactory.openSession() and session.close():

Code:
public class Setup extends Action
{
    ManagersFactory mFactory = null;
    Collection topTen = null;
    Session session = null;
   
    public ActionForward execute (ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception
    {
        ServletContext sCtx = request.getSession ().getServletContext ();
        SessionFactory sFactory = (SessionFactory)sCtx.getAttribute (HibernatePlugIn.SESSION_FACTORY_KEY);
        mFactory = (ManagersFactory) sCtx.getAttribute (ManagersPlugIn.MANAGERS_FACTORY_KEY);
        session = sFactory.openSession ();
        if (session.isOpen ())
        {
            //topTen = new ArrayList();
            MediaManager mediaManager = (MediaManager) mFactory.getManager (session,"com.mimetics.managers.MediaManager");
            topTen = mediaManager.getTopTenMedia ();
            request.setAttribute ("topTenMedia",topTen);
        }
        return (mapping.findForward ("setup.successfull"));
    }
}

ManagersFactory and SessionFactory are loaded as StrutsPlugIns and stored in servlet context. Here is the code:
IManager.java
Code:
public interface IManager
{
    public Session getSession ();
    public void begin ();
    public void end ();
    public void commit ();
    public void rollback ();
}


ManagersFactory.java
Code:
public class ManagersFactory
{
    /** Creates a new instance of ManagersFactory */
    public ManagersFactory ()
    {
    }
    public IManager getManager (Session session, String managerType)
    {
        IManager imanager = null;
        try
        {
            Class cls = Class.forName (managerType);
            Class ctorTypes [] = new Class[1];
            ctorTypes [0] = Session.class;
            Constructor ctor = cls.getConstructor (ctorTypes);
            Object ctorArgs[] =new Object [1];
            ctorArgs[0] = session;
            imanager  = (IManager)ctor.newInstance (ctorArgs);
        }
        catch (Exception ex)
        {
            ex.printStackTrace (System.out);
        }
        return imanager;
    }
}


Manager.java

Code:
public class Manager implements IManager
{
    private Session session = null;
    /**
     * Creates a new instance of Manager
     */
    public Manager (Session session)
    {
        this.session = session;
    }
   
    public Session getSession ()
    {
        return this.session;
    }
    public  void begin ()
    {
       
        if (this.getSession () != null)
           this.getSession ().beginTransaction ();
    }
   
    public void commit ()
    {
        if (this.getSession () != null)
            this.getSession ().getTransaction ().commit ();
    }
   
    public void rollback ()
    {
       
        if (this.getSession () != null)
        {
            try
            {
                this.getSession ().getTransaction ().rollback ();
            }
            catch (HibernateException hbex2)
            {
                StringBuffer exception = new StringBuffer ("Couldn't do rollback(): ");
                exception.append (hbex2.toString ());
                System.out.println (exception.toString ());
            }
            try
            {
                this.getSession ().close ();
            }
            catch (HibernateException hbex3)
            {
                StringBuffer exception = new StringBuffer ("Error clossing session!: ");
                exception.append (hbex3.toString ());
                System.out.println (exception.toString ());
            }
        }
    }
   
    public void end ()
    {
        Session session = this.getSession ();
        if (session != null)
            session.close ();
       
    }
}


MediaManager.java

Code:
public class MediaManager extends Manager
{
   
    private Session session;
    /** Creates a new instance of MediaManager */
    public MediaManager (Session session)
    {
        super (session);
    }
    public Media getMediaById (Long mediaId )
    {
        super.begin ();
        Media media = (Media) this.session.get (Media.class, mediaId);
        super.end ();
        return media;
    }
    public List<Media> getTopTenMedia ()
    {
        List topTen = null;
        Criteria crit = null;
        super.begin ();
        String queryString = new String ("from Media as med order by med.views asc");
        crit = super.getSession ().createCriteria (Media.class);
        crit.setMaxResults (10);
        topTen = crit.list ();
        super.end ();
        return topTen;
    }
}



Full stack trace of any exception that occurs:
org.hibernate.exception.GenericJDBCException: could not execute query
org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.loader.Loader.doList(Loader.java:2214)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2095)
org.hibernate.loader.Loader.list(Loader.java:2090)
org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:95)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
com.mimetics.managers.MediaManager.getTopTenMedia(MediaManager.java:43)
com.mimetics.actions.Setup.execute(Setup.java:48)
org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:53)
org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:64)
org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:48)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:280)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1858)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:446)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

Name and version of the database you are using: MySQL 5.0.27

The generated SQL (show_sql=true):
Hibernate: select this_.media_id as media1_4_4_, this_.filename as filename4_4_, this_.file_size as file3_4_4_, this_.file_size_mb as file4_4_4_, this_.path as path4_4_, this_.description as descript6_4_4_, this_.views as views4_4_, this_.title as title4_4_, this_.tags as tags4_4_, this_.upload_date as upload10_4_4_, this_.type as type4_4_, this_.owner as owner4_4_, mediatype2_.type_id as type1_5_0_, mediatype2_.type_name as type2_5_0_, user3_.email as email0_1_, user3_.name as name0_1_, user3_.surname as surname0_1_, user3_.country as country0_1_, user3_.nickname as nickname0_1_, user3_.password as password0_1_, user3_.preferences as preferen7_0_1_, user3_.type as type0_1_, userprefer4_.preference_id as preference1_3_2_, userprefer4_.toolbar_order as toolbar2_3_2_, userprefer4_.rbar_order as rbar3_3_2_, userprefer4_.show_comments as show4_3_2_, userprefer4_.show_email as show5_3_2_, usertype5_.type_id as type1_1_3_, usertype5_.type_name as type2_1_3_, usertype5_.privileges as privileges1_3_ from media this_ inner join media_types mediatype2_ on this_.type=mediatype2_.type_id inner join users user3_ on this_.owner=user3_.email left outer join user_preferences userprefer4_ on user3_.preferences=userprefer4_.preference_id left outer join user_types usertype5_ on user3_.type=usertype5_.type_id limit ?

And I think that's all the information I can give, If you need something else, just post here and ask me.

I'm getting that strange exception and I don't know why. Also I would like to know what do you think of my approach for abstracting hibernate handling from Struts and the presentation layer.

Thanks in advance to any responses :) .


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.