0

I am attempting to handle an 'entity' through annotation instead of a hibernate xml mapping.
I face a situation where addition succeeds but retrieval fails - help is appreciated.
Model class:

@Entity
@Table(name = "PERSON")
public class Person implements Serializable {
    private static final long serialVersionUID = -5527566248002296042L;
    @Id
    @Column(name = "ID")
    @GeneratedValue
    private Integer id;
    @Column(name = "FIRST_NAME")
    private String firstName;
    @Column(name = "LAST_NAME")
    private String lastName;
    @Column(name = "MONEY")
    private Double money;
.....setters and getters
}

spring configuration:

<context:annotation-config />
    <context:component-scan base-package="org.spring.entity,org.spring.service" />

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
....
    </bean>

        <!-- Hibernate session factory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
...
        <property name="packagesToScan">
        <list>
        <value>org.spring.entity</value>
        <value>org.spring.service</value>
        </list>
        </property>
        <property name="hibernateProperties">
...
        </property>
    </bean>

Service class:

public void add(String firstName, String lastName, Double money) {
        // Retrieve session from Hibernate
        Session session = sessionFactory.openSession();
        try{ 
        // Create a new person
        Person person = new Person();
        person.setFirstName(firstName);
        person.setLastName(lastName);
        person.setMoney(money);

        // Save
        session.save(person);
        }
        finally{
        session.close();
        }
    }
public void edit(Integer id, String firstName, String lastName, Double money) {
        // Retrieve session from Hibernate
        Session session = sessionFactory.openSession();
        try{ 
        // Retrieve existing person via id
        Query query = session.createQuery("FROM  Person WHERE ID=?");<=FAILS HERE
        query.setInteger(0, id);
        Person person = (Person)query.list().get(0);
......
}

The error is as below:

Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException:
person is not mapped [from person where ID=?]
        at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClass
Persister(SessionFactoryHelper.java:180)
        at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement
(FromElementFactory.java:110)
        at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromCla
use.java:93)
        at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlW
alker.java:324)
IUnknown
  • 9,301
  • 15
  • 50
  • 76

1 Answers1

0

Your HQL is wrong, Do this way:

(in case of multiple results, their might be some syntax left right, please check.)

Query query = session.createQuery("FROM  Person WHERE ID=:ID")
List list=query.setParameter("ID",ID).list();

or

(in case of Single result)

Person person =new Person ();
person =(Person ) session.get(Person .class, ID);
Navdeep Singh
  • 699
  • 1
  • 10
  • 25