Ошибка спящего режима - QuerySyntaxException: пользователи не отображаются [от пользователей] - PullRequest
113 голосов
/ 31 марта 2012

Я пытаюсь получить список всех пользователей из таблицы «users», и я получаю следующую ошибку:

org.hibernate.hql.internal.ast.QuerySyntaxException: users is not mapped [from users]
org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180)
org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110)
org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93)

Это код, который я написал для добавления / получения пользователей:

public List<User> getUsers() {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    List<User> result = (List<User>) session.createQuery("from users").list();
    session.getTransaction().commit();
    return result;
}

public void addUser(User user) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    session.save(user);
    session.getTransaction().commit();
}

public void addUser(List<User> users) {
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    session.beginTransaction();
    for (User user : users) {
        session.save(user);
    }
    session.getTransaction().commit();
}

Добавление пользователей работает, но когда я использую функцию getUsers, я получаю следующие ошибки.

Это мой конфигурационный файл hibernate:

<hibernate-configuration>
<session-factory>
    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.default_schema">test</property>
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

    <property name="show_sql">true</property>

    <property name="format_sql">true</property>
    <property name="hbm2ddl.auto">create-drop</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>
    <property name="current_session_context_class">thread</property>

    <!-- Mapping files will go here.... -->

    <mapping class="model.Company" />
    <mapping class="model.Conference" />
    <mapping class="model.ConferencesParticipants" />
    <mapping class="model.ConferenceParticipantStatus" />
    <mapping class="model.ConferencesUsers" />
    <mapping class="model.Location" />
    <mapping class="model.User" />

</session-factory>

а это мой класс пользователя:

@Entity
@Table( name = "Users" )
public class User implements Serializable{

    private long userID;
    private int pasportID;
    private Company company; 
    private String name;
    private String email;
    private String phone1;
    private String phone2;
    private String password; //may be null/empty , will be kept hashed
    private boolean isAdmin;
    private Date lastLogin;

    User() {} //not public on purpose!

    public User(int countryID, Company company, String name, String email,
            String phone1, String phone2, String password, boolean isAdmin) {
        this.pasportID = countryID;
        this.company = company;
        this.name = name;
        this.email = email;
        this.phone1 = phone1;
        this.phone2 = phone2;
        this.password = password;
        this.isAdmin = isAdmin;
    }

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment", strategy = "increment")
    public long getUserID() {
        return userID;
    }
    public void setUserID(long userID) {
        this.userID = userID;
    }
    ...    
}

Есть идеи, почему я получаю эту ошибку?

Ответы [ 14 ]

1 голос
/ 12 сентября 2018

Я получал ту же ошибку, когда Spring с hibernate .. Я использовал "user" в нижнем регистре в моем createQuery выражении, и мой класс был User..So изменил его на User в моем запросе, и проблема была решена.

Запрос перед:

Query query= em.createQuery("select u from user u where u.username=:usr AND u.password=:pass",User.class);

Запрос после:

Query query= em.createQuery("select u from User u where u.username=:usr AND u.password=:pass",User.class);
1 голос
/ 29 декабря 2017

Эта проблема возникла при замене старой библиотеки hibernate-core на hibernate-core-5.2.12. Однако все мои настройки были в порядке. И я исправил эту проблему, создав сессионный завод следующим образом:

private static SessionFactory buildsSessionFactory() {
    try {
        if (sessionFactory == null) {
            StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
                    .configure("/hibernate.cfg.xml").build();
            Metadata metaData = new MetadataSources(standardRegistry)
                    .getMetadataBuilder().build();
            sessionFactory = metaData.getSessionFactoryBuilder().build();
        }
        return sessionFactory;
    } catch (Throwable th) {

        System.err.println("Enitial SessionFactory creation failed" + th);

        throw new ExceptionInInitializerError(th);

    }
}

Надеюсь, это кому-нибудь поможет

0 голосов
/ 25 февраля 2019

Вы должны ввести то же имя в вашем запросе выбора, что и ваша сущность или класс (с учетом регистра).т.е. выберите пользователя из className / Entity Name user;

0 голосов
/ 26 января 2019

В вашем запросе вы должны использовать имя класса (User), а не имя таблицы (users), поэтому ваш запрос "от пользователя"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...