org.hibernate.hql.ast.QuerySyntaxException - PullRequest
       1

org.hibernate.hql.ast.QuerySyntaxException

3 голосов
/ 10 января 2011
org.hibernate.hql.ast.QuerySyntaxException:

пользователи не отображаются [ВЫБЕРИТЕ электронную почту, id ИЗ пользователей, ГДЕ email='dsdd@dds.com 'И пароль =' asasas ']

public ILogin authenticate(Login login) {
        System.out.println(login);
        System.out.println(login.getEmail());
        String query = "SELECT email, id FROM users WHERE email='"
        + login.getEmail() + "' AND password='" + login.getPassword() + "'";
        results = getHibernateTemplate().find(query);
        System.out.println(results);
        return null;
}

Iесть класс бина входа ... здесь это следует.

package 

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

public class Login {
      public Login(){}
        private Long id = null;
        private String email;
        private String password;

        public Login(String email, String password)
        {
            this.email = email;
            this.password = password;
        }

        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)
        public Long getId() {
            return id;
        }

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

        public String getPassword() {
            return password;
        }

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

        public String getEmail() {
            return email;
        }

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

        }
}

Мое application-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" default-autowire="byName" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:p="http://www.springframework.org/schema/p"
  xmlns:tx="http://www.springframework.org/schema/tx"
  xsi:schemaLocation="
  http://www.springframework.org/schema/tx 
  http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<!-- Turn on AspectJ @Configurable support -->

<context:spring-configured />
<context:property-placeholder location="classpath*:*.properties" />
<context:component-scan base-package="com.intermedix"/>
<context:annotation-config/>

<!-- Turn on @Autowired, @PostConstruct etc support -->
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />


<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="myDataSource" />
        <property name="annotatedClasses">
            <list>
                <value>com.intermedix.domain.Login</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>

    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/spring"/>
        <property name="username" value="monty"/>
        <property name="password" value="indian"/>
    </bean>   

    <tx:annotation-driven transaction-manager="txManager"/>

    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory" ref="sessionFactory" />
    </bean>

</beans>

Ответы [ 5 ]

8 голосов
/ 10 января 2011

Даже если это не относится к вашему вопросу:

Не используйте Hibernate / JPA таким образом (конкатенация строк)! :

String query = "SELECT email, id FROM users AS u WHERE email='"+ login.getEmail() + "' AND password='" + login.getPassword() + "'";

Вместо этого используйте HQL, как подготовленные операторы:

createQuery(
   "SELECT l FROM login WHERE l.email=:email AND l.password=:password")
   .setParameter("login",login.getEmail())
   .setParameter("password",login.getPassword());

Если вы сделаете это «в своем стиле», вам будет очень весело с SQL-инъекциями!

Далее: прочитайте справку по Hibernate о HQL, для меня похоже, что вы пишете SQL вместо HQL.

5 голосов
/ 10 января 2011

ВЫБЕРИТЕ электронную почту, идентификатор от пользователей

Что такое "пользователи"?В вашей конфигурации или коде нет ничего, что называется «пользователи», поэтому Hibernate не имеет понятия, о чем вы говорите.

Во-вторых, ваш класс Login не помечен @Entity, поэтому Hibernate, вероятноигнорируя это.

Поэтому добавьте аннотацию и, скорее всего, измените свой запрос на:

ВЫБЕРИТЕ адрес электронной почты, идентификатор ИЗ Логин

2 голосов
/ 10 января 2011

Мне кажется очевидным: «пользователи не отображаются ...»

Либо вы не сопоставили таблицу «Пользователи», либо неправильно настроили ее.

0 голосов
/ 14 мая 2013
List list = getHibernateTemplate().find("from Form3A where FAC_ID=?",FAC_ID);

ЗДЕСЬ Form3A - это имя класса, а файл конфигурации -

<property name="annotatedClasses">
<list>
<value>org.fbis.models.Form3A</value>
</list>
</property>
0 голосов
/ 19 января 2013
@Entity
@Table(name="users")
public class Login {

Вам действительно нужно аннотировать класс Login, поскольку вы говорите (<property name="annotatedClasses">), что в application-context.xml, например, вот так

@Column(name="password")
public String getPassword() {
            return password;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...