почему я получаю исключение сопоставления с первопричиной SAXParseException;номер строки: 19;columnNumber: 45 - PullRequest
0 голосов
/ 20 марта 2019

Buyer.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="entity.Buyer" table="buyer">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="username" type="string">
            <column name="username" length="25" not-null="true" unique="true" />
        </property>
        <property name="fname" type="string">
            <column name="fname" length="20" not-null="true" />
        </property>
        <property name="lname" type="string">
            <column name="lname" length="20" not-null="true" />
        </property>
        <property name="email" type="string">
            <column name="email" length="50" not-null="true" unique="true" />
        </property>
        <property name="phoneno" type="int">
            <column name="phoneno" not-null="true" unique="true" />
        </property>
        <property name="password" type="string">
            <column name="password" length="30" not-null="true" />
        </property>
        <property name="location" type="string">
            <column name="location" length="16" not-null="true" />
        </property>
  </class>
</hibernate-mapping>

Buyer.java - это класс POJO, созданный в качестве сущности из базы данных sql

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Tariana
 */
@Entity
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Buyer.findAll", query = "SELECT b FROM Buyer b")
    , @NamedQuery(name = "Buyer.findById", query = "SELECT b FROM Buyer b WHERE b.id = :id")
    , @NamedQuery(name = "Buyer.findByUsername", query = "SELECT b FROM Buyer b WHERE b.username = :username")
    , @NamedQuery(name = "Buyer.findByFname", query = "SELECT b FROM Buyer b WHERE b.fname = :fname")
    , @NamedQuery(name = "Buyer.findByLname", query = "SELECT b FROM Buyer b WHERE b.lname = :lname")
    , @NamedQuery(name = "Buyer.findByEmail", query = "SELECT b FROM Buyer b WHERE b.email = :email")
    , @NamedQuery(name = "Buyer.findByPhoneno", query = "SELECT b FROM Buyer b WHERE b.phoneno = :phoneno")
    , @NamedQuery(name = "Buyer.findByPassword", query = "SELECT b FROM Buyer b WHERE b.password = :password")
    , @NamedQuery(name = "Buyer.findByLocation", query = "SELECT b FROM Buyer b WHERE b.location = :location")})
public class Buyer implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    private Integer id;
    @Basic(optional = false)
    private String username;
    @Basic(optional = false)
    private String fname;
    @Basic(optional = false)
    private String lname;
    @Basic(optional = false)
    private String email;
    @Basic(optional = false)
    private int phoneno;
    @Basic(optional = false)
    private String password;
    @Basic(optional = false)
    private String location;

    public Buyer() {
    }

    public Buyer(Integer id) {
        this.id = id;
    }

    public Buyer(Integer id, String username, String fname, String lname, String email, int phoneno, String password, String location) {
        this.id = id;
        this.username = username;
        this.fname = fname;
        this.lname = lname;
        this.email = email;
        this.phoneno = phoneno;
        this.password = password;
        this.location = location;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getPhoneno() {
        return phoneno;
    }

    public void setPhoneno(int phoneno) {
        this.phoneno = phoneno;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Buyer)) {
            return false;
        }
        Buyer other = (Buyer) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entity.Buyer[ id=" + id + " ]";
    }
    
}

Registration.java должен обеспечивать постоянство данных из файла jsp в базу данных sql

import entity.Buyer;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.*; 
import org.hibernate.boot.registry.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.metamodel.*;

public class Register extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
        
        Buyer buyerreg = new Buyer();
        
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        String username = request.getParameter("username");
        String fname = request.getParameter("fname");
        String lname = request.getParameter("lname");
        String phone = request.getParameter("phoneno");
        int phoneno = Integer.parseInt(phone);
        String location = request.getParameter("location");
        
        buyerreg.setEmail(email);
        buyerreg.setPassword(password);
        buyerreg.setFname(fname);
        buyerreg.setLname(lname);
        buyerreg.setUsername(username);
        buyerreg.setPhoneno(phoneno);
        buyerreg.setLocation(location);
        
        Configuration configuration = new Configuration();
        configuration.addAnnotatedClass(Buyer.class)
            .configure();
            
        
        StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .configure("hibernate.cfg.xml")
                .build();
        Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();

        SessionFactory factory;  
        factory = meta.getSessionFactoryBuilder().build();
        Session session=factory.openSession();  

        Transaction t = session.beginTransaction();

        session.persist(buyerreg);           
        t.commit();    
        session.close();    
        System.out.println("success"); 
        response.sendRedirect("shop.jsp");
    }
}

hibernate.cfg.xml - это мой файл конфигурации Hibernate

<?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.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mkulimaonline</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property>
    <property name="hibernate.connection.autocommit">true</property>
    <property name="hibernate.hbm2ddl.auto">create</property>
    <mapping class="entity.Buyer" package="entity" resource="entity/Buyer.hbm.xml"/>
    <property name="annotatedClasses"><list><value>entity.Buyer</value></list>
    </property>
  </session-factory>
</hibernate-configuration>

Ошибка , отображаемая в браузере

message invalid configuration

description The server encountered an internal error that prevented it from fulfilling this request.

exception
org.hibernate.MappingException: invalid configuration
	org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2158)
	org.hibernate.cfg.Configuration.configure(Configuration.java:2075)
	org.hibernate.cfg.Configuration.configure(Configuration.java:2054)
	Register.doGet(Register.java:38)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)


root cause
org.xml.sax.SAXParseException; lineNumber: 19; columnNumber: 45; Element type "list" must be declared.
	com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
	com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:134)
	com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396)
	com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
	com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
	com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleStartElement(XMLDTDValidator.java:1906)
	com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.startElement(XMLDTDValidator.java:742)
	com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
	com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2784)
	com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
	com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
	com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
	com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:842)
	com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)
	com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
	com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
	com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
	org.dom4j.io.SAXReader.read(SAXReader.java:465)
	org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2155)
	org.hibernate.cfg.Configuration.configure(Configuration.java:2075)
	org.hibernate.cfg.Configuration.configure(Configuration.java:2054)
	Register.doGet(Register.java:38)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

Я удалил аннотированный класс из файла hibernate.cfg.xml.Я не использовал Spring.Но как-то это сработало Я не знаю, почему этот кусок кода не работает org.hibernate.MappingException: Неизвестная сущность: entity.Buyer эта ошибка повторяется, поэтому я прокомментировал код

SessionFactory factory; 
        StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .configure("hibernate.cfg.xml")
                .build();
        Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
        factory = meta.getSessionFactoryBuilder().build();
        Session session=factory.openSession(); 
        
        
        Transaction t = session.beginTransaction();

        session.persist(buyerreg);           
        t.commit();    
        session.close();
        

Это то, что я использовал вместо

hibernate.cfg.config

<?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.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mkulimaonline</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.current_session_context_class">thread</property>
    <property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property>
    <property name="hibernate.connection.autocommit">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
  </session-factory>
</hibernate-configuration>

Registration.java Я прокомментировал код, который не работал, и эта альтернатива как-то работала

import entity.Buyer;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class Register extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
        
        Buyer buyerreg = new Buyer();
        
        String email = request.getParameter("email");
        String password = request.getParameter("password");
        String username = request.getParameter("username");
        String fname = request.getParameter("fname");
        String lname = request.getParameter("lname");
        String phone = request.getParameter("phoneno");
        int phoneno = Integer.parseInt(phone);
        String location = request.getParameter("location");
        
        buyerreg.setEmail(email);
        buyerreg.setPassword(password);
        buyerreg.setFname(fname);
        buyerreg.setLname(lname);
        buyerreg.setUsername(username);
        buyerreg.setPhoneno(phoneno);
        buyerreg.setLocation(location);
        
        SessionFactory sessionFactory;
        ServiceRegistry serviceRegistry;

        Configuration configuration = new Configuration();
        configuration.addAnnotatedClass(Buyer.class)
            .addResource("entity/Buyer.hbm.xml")
            .configure();
        
        serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .configure("hibernate.cfg.xml")
                .build();        
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);

        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.persist(buyerreg);
        session.getTransaction().commit();
        session.close();
        
        System.out.println("success"); 
        response.sendRedirect("shop.jsp");
        
        /*SessionFactory factory; 
        StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .configure("hibernate.cfg.xml")
                .build();
        Metadata meta = new MetadataSources(ssr).getMetadataBuilder().build();
        factory = meta.getSessionFactoryBuilder().build();
        Session session=factory.openSession(); 
        
        
        Transaction t = session.beginTransaction();

        session.persist(buyerreg);           
        t.commit();    
        session.close();
        */
    }
}

Buyer.java Мне пришлось использовать автоматически сгенерированный класс Java из базы данных ... У моего собственного создания была эта ошибка даже после использования@Entity annotation "org.hibernate.MappingException: Неизвестная сущность: entity.Buyer"

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package entity;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Tariana
 */
@Entity
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Buyer.findAll", query = "SELECT b FROM Buyer b")
    , @NamedQuery(name = "Buyer.findById", query = "SELECT b FROM Buyer b WHERE b.id = :id")
    , @NamedQuery(name = "Buyer.findByUsername", query = "SELECT b FROM Buyer b WHERE b.username = :username")
    , @NamedQuery(name = "Buyer.findByFname", query = "SELECT b FROM Buyer b WHERE b.fname = :fname")
    , @NamedQuery(name = "Buyer.findByLname", query = "SELECT b FROM Buyer b WHERE b.lname = :lname")
    , @NamedQuery(name = "Buyer.findByEmail", query = "SELECT b FROM Buyer b WHERE b.email = :email")
    , @NamedQuery(name = "Buyer.findByPhoneno", query = "SELECT b FROM Buyer b WHERE b.phoneno = :phoneno")
    , @NamedQuery(name = "Buyer.findByPassword", query = "SELECT b FROM Buyer b WHERE b.password = :password")
    , @NamedQuery(name = "Buyer.findByLocation", query = "SELECT b FROM Buyer b WHERE b.location = :location")})
public class Buyer implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    private Integer id;
    @Basic(optional = false)
    private String username;
    @Basic(optional = false)
    private String fname;
    @Basic(optional = false)
    private String lname;
    @Basic(optional = false)
    private String email;
    @Basic(optional = false)
    private int phoneno;
    @Basic(optional = false)
    private String password;
    @Basic(optional = false)
    private String location;

    public Buyer() {
    }

    public Buyer(Integer id) {
        this.id = id;
    }

    public Buyer(Integer id, String username, String fname, String lname, String email, int phoneno, String password, String location) {
        this.id = id;
        this.username = username;
        this.fname = fname;
        this.lname = lname;
        this.email = email;
        this.phoneno = phoneno;
        this.password = password;
        this.location = location;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getPhoneno() {
        return phoneno;
    }

    public void setPhoneno(int phoneno) {
        this.phoneno = phoneno;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Buyer)) {
            return false;
        }
        Buyer other = (Buyer) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entity.Buyer[ id=" + id + " ]";
    }
    
}

и Buyer.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="entity.Buyer" table="buyer">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        <property name="username" type="string">
            <column name="username" length="25" not-null="true" unique="true" />
        </property>
        <property name="fname" type="string">
            <column name="fname" length="20" not-null="true" />
        </property>
        <property name="lname" type="string">
            <column name="lname" length="20" not-null="true" />
        </property>
        <property name="email" type="string">
            <column name="email" length="50" not-null="true" unique="true" />
        </property>
        <property name="phoneno" type="int">
            <column name="phoneno" not-null="true" unique="true" />
        </property>
        <property name="password" type="string">
            <column name="password" length="30" not-null="true" />
        </property>
        <property name="location" type="string">
            <column name="location" length="16" not-null="true" />
        </property>
  </class>
</hibernate-mapping>
0 голосов
/ 21 марта 2019

Как говорит ваше исключение, существует проблема с анализатором XML (SAXParseException).Если вы посмотрите на определенный DTD , вы можете проверить, что под элементом нет элемента, разрешенного.Я думаю, что вы скопировали некоторый контент из весенней конфигурации.

SAXParseException не будет отображаться, если вы удалите эти строки из файла hibernate.cfg.xml:

<property name="annotatedClasses"><list><value>entity.Buyer</value></list>
</property>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...