org.hibernate.hql.internal.ast.QuerySyntaxException:用户没在[从用户]映射,其中用户是我的bean类

问题描述 投票:1回答:3

我使用GWT的冬眠,所以我想从表中检索,我已经创建了一个DTO类,并在我所初始化的DTO对象的简单Java类数据。

在服务器侧,我存储该结果在一个数组列表,也比使用每个循环来存储所述查询结果到用户类型和比调用通过使用DTO对象的私有方法。

我的代码是好的,但得到的异常下面......而在检索我是“从用户”射击查询,其中用户是我的简单的bean类

这是我的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>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/rs</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.release_mode">auto</property>
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">10</property>

        <!-- MySQL dialect -->
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.hbm2ddl.import_files"></property>

        <!-- Names the annotated entity class -->
         <mapping class="com.valto.querybrowser.client.model.User"/>
        <mapping class="com.valto.querybrowser.client.model.UserDTO"/>

    </session-factory>
</hibernate-configuration>

这是我的DTO类UserDTO.java

    @Entity(name="usertable")
    @Table(name="usertable")
    public class UserDTO implements Serializable{ 
        private static final long serialVersionUID = -5753020447289277291L;

        @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
        @Column(name="userId")
        private int id;
        @Column(name="user_name")
        private String user_name;

        public UserDTO()
        {

        }
        public UserDTO(int id)
        {
            this.id=id;

        }
        public UserDTO(int id,String user_name)
        {
            this.id=id;
            this.user_name=user_name;

        }

        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getUser_name() {
            return user_name;
        }
        public void setUser_name(String user_name) {
            this.user_name = user_name;
        }


    }

这是我简单的bean类User.java

public class User {

    public int id;
    public String user_name;
    public User(UserDTO udto)
    {
        id=udto.getId();
        user_name=udto.getUser_name();
    }
}

这是我的服务器端代码..

@Override
    public List<UserDTO> getUsers(String getInput) throws IllegalArgumentException {

        Session session = SessionFacoryCode.getSessionFactory().openSession();
        System.out.println(getInput+"\n");


        try {
            session.beginTransaction();
             List<User> user = new ArrayList<User>(session.createQuery(getInput).list());
                List<UserDTO> userdto = new ArrayList<UserDTO>(user != null ? user.size() : 0);
                if (user != null) {
                  for (User user1 : user) {
                  userdto.add(createUserDTO(user1));
                  }
                }
            session.getTransaction().commit();
            return userdto;


        } catch (Exception e) {
            getInput=null;
            e.printStackTrace();
            return null;
        } finally {
            session.close();
        }

    }

    private UserDTO createUserDTO(User user1) {

        return new UserDTO(user1.id,user1.user_name);
    }

这是我的SessionfactoryCode.java

public class SessionFacoryCode {
    private static final SessionFactory sessionFactory;

    static {
            try {
                Configuration cfg = new Configuration().configure();         
                ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
               . applySettings(cfg.getProperties()).buildServiceRegistry();
                sessionFactory =cfg.buildSessionFactory(serviceRegistry);



            } catch (Throwable th) {
                    System.err.println("Enitial SessionFactory creation failed" + th);
                    throw new ExceptionInInitializerError(th);
            }
    }
    public static SessionFactory getSessionFactory() {
            return sessionFactory;
    }

}

这是User.java添加@Entity后的错误...

Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.valto.querybrowser.client.model.User
    at org.hibernate.cfg.InheritanceState.determineDefaultAccessType(InheritanceState.java:277)
    at org.hibernate.cfg.InheritanceState.getElementsToProcess(InheritanceState.java:224)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:665)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3533)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3487)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1376)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1777)
    at com.valto.querybrowser.client.model.SessionFacoryCode.<clinit>(SessionFacoryCode.java:16)
    ... 36 more
[ERROR] 500 - POST /querybrowser/greet (127.0.0.1) 57 bytes
   Request headers
      Host: 127.0.0.1:8888
      Connection: keep-alive
      Content-Length: 145
      X-GWT-Module-Base: http://127.0.0.1:8888/querybrowser/
      X-GWT-Permutation: HostedMode
      Origin: http://127.0.0.1:8888
      User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
      Content-Type: text/x-gwt-rpc; charset=UTF-8
      Accept: */*
      Referer: http://127.0.0.1:8888/QueryBrowser.html?gwt.codesvr=127.0.0.1:9997
      Accept-Encoding: gzip,deflate
      Accept-Language: en-GB,en-US;q=0.8,en;q=0.6
   Response headers
      Content-Type: text/plain
   [WARN] Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract java.util.List com.valto.querybrowser.client.GreetingService.gettableNames() throws java.lang.IllegalArgumentException' threw an unexpected exception: java.lang.NoClassDefFoundError: Could not initialize class com.valto.querybrowser.client.model.SessionFacoryCode
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:755)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:501)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:68)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:370)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
    at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:960)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1021)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.valto.querybrowser.client.model.SessionFacoryCode
    at com.valto.querybrowser.server.GreetingServiceImpl.gettableNames(GreetingServiceImpl.java:33)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
    ... 30 more
hibernate exception gwt
3个回答
0
投票

这段代码实际上是造成问题。

List<User> user = new ArrayList<User>(session.createQuery(getInput).list());

你正试图从数据库中读取列表,而你不知道没有映射对User表。

@Entity需要添加用于User.java


0
投票

User is not mapped [from User]这意味着Hibernate不知道实体User是什么,所以包括Hibernate配置文件的User实体 - hibernate.cfg.xml文件

例如:

<mapping class="mypackage.User"/>

你也缺少了@EntityUser声明。因此,增加对@Entity类注释User

@Entity
@Table(name="T_USER")
public class User {
...
}

有些数据库有USER作为保留关键字,所以尽量使用@Table注解来提供不同的表名。

更新:

现在的错误说Caused by: org.hibernate.AnnotationException: No identifier specified for entity: com.valto.querybrowser.client.model.User这表明你没有在User类,它表示一个标识符,它处于休眠强制性的任何领域。所以只需添加必须的注解为外地idUser像你一样的UserDTO,例如:

@Entity
@Table(name="T_USER")
public class User {
   @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
   private int id;
   ...
}

0
投票

用户没有映射[由用户]这意味着Hibernate不知道实体的用户是什么,所以包括Hibernate配置文件的用户的实体 - hibernate.cfg.xml文件或检查你可能已经做了一些错字的错误什么的。

© www.soinside.com 2019 - 2024. All rights reserved.