严重阻碍了struts2与hibernate的集成

时间:2012-07-05 09:52:44

标签: hibernate struts2 jdb

我想将Struts与Hibernate集成。我是这些技术的新手。

幸运的是,我在过去的4天里严重陷入困境,我的桌子无法映射。 请帮忙。 我正在研究netbeans 7.1.2。我在derby(Java DB)上创建了数据库。我在里面创建了几张桌子。

在我的Java EE简单项目中,它只需要从数据库中获取整个数据并在JSP页面上显示。

这是我的文件:

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
 <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>example/HelloWorld.jsp</welcome-file>
    </welcome-file-list>
</web-app>    

的helloWorld.jsp

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
    <head>
        <title>Hello</title>
    </head>

    <body>
        <table>
            <tr>
                <th>CNAME</th>
                <th>BODY</th>
            </tr>
            <s:iterator value="questionList" var="question">
                <tr>
                    <td><s:property value="cname"/></td>
                    <td><s:property value="body"/></td>
                </tr>   
            </s:iterator>
        </table>
    </body>
</html>

example.xml:

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <package name="example" namespace="/example" extends="struts-default">
        <action name="HelloWorld" class="example.HelloWorld">
            <result>/example/HelloWorld.jsp</result>
        </action>
    </package>
</struts>

的hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
    <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
    <property name="hibernate.connection.url">jdbc:derby://localhost:1527/Q4U</property>
    <property name="hibernate.connection.username">rambo</property>
    <property name="hibernate.connection.password">**</property>
    <mapping resource="hibernate.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

Hibernate.hbm.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="beans.Question" table="QUESTION">
      <!--  <id name="qid" type="java.lang.Integer">
            <column name="QID" />
            <generator class="increment" />
        </id>
        <property name="opc" type="java.lang.Integer">
            <column name="OPC" not-null="true"/>
        </property>
        <property name="uid" type="java.lang.Integer">
            <column name="UID" not-null="true"/>
        </property>
        <property name="cid" type="java.lang.Integer">
            <column name="CID" not-null="true"/>
        </property>
        <property name="abuse" type="java.lang.Integer">
            <column name="ABUSE" not-null="true"/>
        </property>
        <property name="accuracy" type="java.lang.Float">
            <column name="ACCURACY" not-null="true"/>
        </property>
        <property name="poston" type="java.util.Date">
            <column name="POSTON" not-null="true"/>
        </property>
        <property name="body" type="java.lang.String">
            <column name="BODY" not-null="true"/>
        </property>
        <property name="op1" type="java.lang.String">
            <column name="OP1" not-null="true"/>
        </property>
        <property name="op2" type="java.lang.String">
            <column name="OP2" not-null="true"/>
        </property>
        <property name="op3" type="java.lang.String">
            <column name="OP4" not-null="true"/>
        </property>
        <property name="op4" type="java.lang.String">
            <column name="OP4" not-null="true"/>
        </property>
        <property name="op5" type="java.lang.String">
            <column name="OP5" not-null="true"/>
        </property>
        <property name="cname" type="java.lang.String">
            <column name="CNAME" not-null="true"/>
        </property> -->
    </class> 
</hibernate-mapping>

Hibernate.reverse.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-schema="RAMBO"/>
  <table-filter match-name="TESTS"/>
  <table-filter match-name="USERS"/>
  <table-filter match-name="QUESTION"/>
  <table-filter match-name="INBOX"/>
  <table-filter match-name="ADMIN"/>
  <table-filter match-name="CATEGORY"/>
</hibernate-reverse-engineering>

struts.xml中:

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <include file="example.xml"/>
    <!-- Configuration for the default package. -->
    <package name="default" extends="struts-default">
    </package>
</struts>

Question.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import java.util.Date;
import java.io.Serializable;
import javax.persistence.*;
/**
 *
 * @author ROMO
 */

@Entity
@Table (name="QUESTION")
public class Question implements Serializable {

    int qid, opc, uid, cid, abuse;
    float accuracy;
    Date poston;
    String body, op1, op2, op3, op4, op5, cname;

    @Column(name="CNAME")
    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    @Column(name="ABUSE")
    public int getAbuse() {
        return abuse;
    }

    public void setAbuse(int abuse) {
        this.abuse = abuse;
    }

    @Column(name="ACCURACY")
    public float getAccuracy() {
        return accuracy;
    }

    public void setAccuracy(float accuracy) {
        this.accuracy = accuracy;
    }

    @Column(name="BODY")
    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    @Column(name="CID")
    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    @Column(name="OP1")
    public String getOp1() {
        return op1;
    }

    public void setOp1(String op1) {
        this.op1 = op1;
    }

    @Column(name="OP2")
    public String getOp2() {
        return op2;
    }

    public void setOp2(String op2) {
        this.op2 = op2;
    }

    @Column(name="OP3")
    public String getOp3() {
        return op3;
    }

    public void setOp3(String op3) {
        this.op3 = op3;
    }

    @Column(name="OP4")
    public String getOp4() {
        return op4;
    }

    public void setOp4(String op4) {
        this.op4 = op4;
    }

    @Column(name="OP5")
    public String getOp5() {
        return op5;
    }

    public void setOp5(String op5) {
        this.op5 = op5;
    }

    @Column(name="OPC")
    public int getOpc() {
        return opc;
    }

    public void setOpc(int opc) {
        this.opc = opc;
    }

    @Column(name="POSTON")
    @Temporal(javax.persistence.TemporalType.DATE)
    public Date getPoston() {
        return poston;
    }

    public void setPoston(Date poston) {
        this.poston = poston;
    }

    @Id
    @GeneratedValue
    @Column(name="QID")
    public int getQid() {
        return qid;
    }

    public void setQid(int qid) {
        this.qid = qid;
    }

    @Column(name="UID")
    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

}

HelloWorld.java

/*
 * $Id: HelloWorld.template,v 1.2 2008-03-27 05:47:21 ub3rsold4t Exp $
 *
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package example;

import java.util.List;
import beans.Question;

import com.opensymphony.xwork2.ActionSupport;

/**
 * <code>Set welcome message.</code>
 */
public class HelloWorld extends ActionSupport {

    private Question question;
    private List<Question> questionList;
    private HiberTest hiberTest;

    public String execute() throws Exception {
        this.questionList = hiberTest.list();
    System.out.println("execute called");
        setMessage(getText(MESSAGE));
        return SUCCESS;
    }

    /**
     * Provide default valuie for Message property.
     */
    public static final String MESSAGE = "HelloWorld.message";

    /**
     * Field for Message property.
     */
    private String message;

    /**
     * Return Message property.
     *
     * @return Message property
     */
    public String getMessage() {
        return message;
    }

    /**
     * Set Message property.
     *
     * @param message Text to display on HelloWorld page.
     */
    public void setMessage(String message) {
        this.message = message;
    }
}

HiberTest.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package example;

import java.util.List;


import org.hibernate.HibernateException;
import org.hibernate.classic.Session;

import beans.Question;

public class HiberTest extends HibernateUtil {

    public List<Question> list() {

        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        session.beginTransaction();
        List<Question> contacts = null;
        try {

            contacts = (List<Question>)session.createQuery("from QUESTION").list();

        } catch (HibernateException e) {
            e.printStackTrace();
            session.getTransaction().rollback();
        }
        session.getTransaction().commit();
        return contacts;
    }
}

HibernateUtil.java

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package example;

import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;

/**
 * Hibernate Utility class with a convenient method to get Session Factory
 * object.
 *
 * @author ROMO
 */
public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

多数民众赞成。当我运行项目时,它运行,但它不显示任何数据库数据。 进一步当我右键单击文件Hibernate.cfg.xml并选择“运行HQL查询”并运行我的查询:'来自QUESTION'时,我收到以下错误:

org.hibernate.hql.ast.QuerySyntaxException:QUESTION未映射[来自QUESTION]     at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)     在org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)     在org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)     在org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)     在org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)     在org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)     在org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)     在org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)     在org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)     在org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)     在org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)     在org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)     在org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)     在org.hibernate.engine.query.HQLQueryPlan。(HQLQueryPlan.java:77)     在org.hibernate.engine.query.HQLQueryPlan。(HQLQueryPlan.java:56)     在org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)     at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)     在org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)     在org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)

请请帮帮我。它是一个简单的应用程序,用于在集成struts和Hibernate中的浏览器上显示数据库数据。

1 个答案:

答案 0 :(得分:2)

在HQL查询中,您使用的是逻辑实体名称,而不是表名,它们区分大小写:

contacts = (List<Question>)session.createQuery("from Question").list();