0

我使用 Hibernate 的 eclipse 工具对包含大约 400 多个表的现有数据库进行了逆向工程;它很好地生成了所有模型,但我无法对模型做任何事情,例如坚持在标题中抛出异常。

我不得不稍微移动文件以使其在 Maven 下工作,这些是相关的主要文件:

这是我的 hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">...</property>
        <property name="hibernate.connection.url">jdbc:mysql://dev.mycee.co.za:3306/mycee</property>
        <property name="hibernate.connection.username">...</property>
        <property name="hibernate.default_schema">mycee</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>

        <property name="hibernate.search.autoregister_listeners">false</property>
        ...
        <mapping resource="za/co/mycee/database/model/Products.hbm.xml" />
        ...
    </session-factory>
</hibernate-configuration>

产品.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated Jun 6, 2013 1:35:02 PM by Hibernate Tools 4.0.0 -->
<hibernate-mapping>
    <class name="za.co.mycee.database.model.Products" table="PRODUCTS" catalog="mycee">
        <meta attribute="class-description" inherit="false">Hibernate Entity for table PRODUCTS @author JanM</meta>
        <meta attribute="extends" inherit="false">za.co.mycee.database.methods.Methods</meta>
        <id name="productId" type="int">
            <column name="PRODUCT_ID" />
            <generator class="assigned" />
        </id>

    ...

        <property name="active" type="int">
            <column name="ACTIVE" not-null="true" />
        </property>

        ...

    </class>
</hibernate-mapping>

产品.java:

package za.co.mycee.database.model;

// Generated Jun 6, 2013 1:35:01 PM by Hibernate Tools 4.0.0

/**
 * Hibernate Entity for table PRODUCTS
 * @author JanM
 */
public class Products extends za.co.mycee.database.methods.Methods implements java.io.Serializable {

    private int productId;
    ...
    private int active;
    ...
    public Products() {
    }

    public Products(int productId, ..., int active, ...) {
        this.productId = productId;
        ...
        this.active = active;
            ...     
    }

    public int getProductId() {
        return this.productId;
    }

    public void setProductId(int productId) {
        this.productId = productId;
    }

    ...

    public int getActive() {
        return this.active;
    }

    public void setActive(int active) {
        this.active = active;
    }

    ...

}

方法.java

package za.co.mycee.database.methods;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Methods {

    private static final Log log = LogFactory.getLog(Methods.class);
    private static final SessionFactory sessionFactory;

    static {
        try {
            // Create the SessionFactory from hibernate.cfg.xml
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Make sure you log the exception, as it might be swallowed
            log.error("Initial SessionFactory creation failed." + ex, ex);
            throw new ExceptionInInitializerError(ex);
        }
    }

    public void persist() {
        log.debug("persisting " + this.getClass() + " instance");
        try {
            sessionFactory.getCurrentSession().persist(this);
            log.debug("persist successful");
        } catch (RuntimeException re) {
            log.error("persist failed", re);
            throw re;
        }
    }

}

堆栈跟踪:

ERROR: za.co.mycee.database.methods.Methods - Initial SessionFactory creation failed.org.hibernate.MappingException: Could not instantiate persister org.hibernate.persister.entity.SingleTableEntityPersister
org.hibernate.MappingException: Could not instantiate persister org.hibernate.persister.entity.SingleTableEntityPersister
        at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:174)
        at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:385)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1798)
        at za.co.mycee.database.methods.Methods.<clinit>(Methods.java:16)
        at za.co.mycee.payhost.endpoint.SinglePaymentEndpoint.doPayment(SinglePaymentEndpoint.java:41)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.springframework.ws.server.endpoint.MethodEndpoint.invoke(MethodEndpoint.java:134)
        at org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter.invokeInternal(DefaultMethodEndpointAdapter.java:240)
        at org.springframework.ws.server.endpoint.adapter.AbstractMethodEndpointAdapter.invoke(AbstractMethodEndpointAdapter.java:53)
        at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:233)
        at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:173)
        at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88)
        at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:59)
        at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:239)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
        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:127)
        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:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassCastException: org.hibernate.type.StringType cannot be cast to org.hibernate.type.VersionType
        at org.hibernate.tuple.PropertyFactory.buildVersionProperty(PropertyFactory.java:162)
        at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:193)
        at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:507)
        at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:146)
        at sun.reflect.GeneratedConstructorAccessor27.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163)
        ... 35 more
Jun 06, 2013 4:11:02 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet spring-ws threw exception
java.lang.ClassCastException: org.hibernate.type.StringType cannot be cast to org.hibernate.type.VersionType
        at org.hibernate.tuple.PropertyFactory.buildVersionProperty(PropertyFactory.java:162)
        at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:193)
        at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:507)
        at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:146)
        at sun.reflect.GeneratedConstructorAccessor27.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
        at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163)
        at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135)
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:385)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1760)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1798)
        at za.co.mycee.database.methods.Methods.<clinit>(Methods.java:16)
        at za.co.mycee.payhost.endpoint.SinglePaymentEndpoint.doPayment(SinglePaymentEndpoint.java:41)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.springframework.ws.server.endpoint.MethodEndpoint.invoke(MethodEndpoint.java:134)
        at org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter.invokeInternal(DefaultMethodEndpointAdapter.java:240)
        at org.springframework.ws.server.endpoint.adapter.AbstractMethodEndpointAdapter.invoke(AbstractMethodEndpointAdapter.java:53)
        at org.springframework.ws.server.MessageDispatcher.dispatch(MessageDispatcher.java:233)
        at org.springframework.ws.server.MessageDispatcher.receive(MessageDispatcher.java:173)
        at org.springframework.ws.transport.support.WebServiceMessageReceiverObjectSupport.handleConnection(WebServiceMessageReceiverObjectSupport.java:88)
        at org.springframework.ws.transport.http.WebServiceMessageReceiverHandlerAdapter.handle(WebServiceMessageReceiverHandlerAdapter.java:59)
        at org.springframework.ws.transport.http.MessageDispatcherServlet.doService(MessageDispatcherServlet.java:239)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
        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:127)
        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:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:722)

如果有更好的方法使用hibernate和maven对数据库进行逆向工程,请告知(我使用了eclipse工具并将文件移动到它们应该在的位置)或者如果可以解决异常,那将是超级的。

4

1 回答 1

0

Spring-Roo 的数据库逆向工程工具没有问题,我没有使用 Hibernate RevEng 工具,而是使用 Spring Roo 成功地对数据库进行了逆向工程:http: //docs.spring.io/spring-roo/reference/html/base -dbre.html

于 2014-03-11T13:17:26.147 回答