次のような Hibernate クエリに問題があります。
List persons = getList("FROM creator.models.Person p WHERE p.lastName="+userName);
(このgetList(String queryString)
メソッドは、セッション ファクトリを使用してクエリを実行するだけです。)
これは私の人のクラスです:
@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
そして、これはテーブルです:
CREATE TABLE persons(
id INTEGER NOT NULL AUTO_INCREMENT,
first_name CHAR(50),
last_name CHAR(50),
abbreviation CHAR(4),
PRIMARY KEY (id)
);
TestName という名前の人を検索すると、次のメッセージで例外が発生します。
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
Hibernate によって作成されたクエリは次のようになります。
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
ちなみに、ID(...
WHERE p.id ="3"
)の検索はうまくいきます!
私にとってはクエリが正しく見え、lastName が突然列名として表示される理由がわからないため、誰かが何が問題なのかを知っていることを願っています。