Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

hibernate "where" query only works for id field

I have a problem with a Hibernate query that looks as follows:

List persons = getList("FROM creator.models.Person p WHERE p.lastName="+userName);

(the getList(String queryString) method just executes the query using a session factory.)

This is my person class:

@Entity
@Table(name="persons")
public class Person{
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name = "id")
    private Long        id;

    @Column(name="first_name", nullable=false, updatable=true)
    private String firstName;

    @Column(name="last_name", nullable=false, updatable=true)
    private String lastName;
    /// etc

And this is the table:

CREATE TABLE persons(
    id INTEGER NOT NULL AUTO_INCREMENT,
    first_name CHAR(50),
    last_name CHAR(50),
    abbreviation CHAR(4),

    PRIMARY KEY (id)
);

Searching for a person with the name TestName, I get an exception with this message:

org.hibernate.exception.SQLGrammarException: Unknown column 'TestName' in 'where clause'
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:82)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
//etc

The query created by Hibernate looks like this:

INFO: HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select person0_.id as id8_, person0_.abbreviation as abbrevia2_8_, person0_.first_name as first3_8_, person0_.last_name as last4_8_ from persons person0_ where person0_.last_name=TestName
Dec 10, 2012 5:14:26 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions

Searching for the id (...WHERE p.id="3") works fine, by the way!

I hope somebody knows what is going wrong because for me the query looks right and I can't find out why the lastName is seen as a column name suddenly.

like image 412
chris Avatar asked Dec 03 '25 17:12

chris


1 Answers

You need to put userName in quotes:

"FROM creator.models.Person p WHERE p.lastName='"+userName+"'";

Or (which is much better) to use parameters

like image 140
a1ex07 Avatar answered Dec 06 '25 06:12

a1ex07