1

我正在尝试从 Oracle 10g 数据库中获取一些数据。因此,我在 application.conf 文件中添加了 db 相关详细信息,当我启动服务器时,在命令提示符中显示连接成功。

我创建了一个实体类,数据库中存在一个类似于类名的表。

Query query = JPA.em().createQuery("select * from Emp");
    List<Emp> empList = query.getResultList();
    for(Emp employees : empList)
        System.out.println(employees.emp_name);

当我尝试运行代码时出现以下异常:

IllegalArgumentException occured : org.hibernate.hql.ast.QuerySyntaxException: unexpected token: * near line 1, column 8 [select * from models.Emp]

编辑:

如果我将代码更改为:

List<Emp> empList = Emp.all().fetch();
    for(Emp employees : empList)
        System.out.println(employees.emp_name);

然后我得到一个例外:

JPAQueryException occured : Error while executing query from models.Emp: ORA-00904: "EMP0_"."ID": invalid identifier

这是我的名为 Emp.java 的模型类:

package models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

import play.data.validation.Required;
import play.db.jpa.Model;

@Entity
public class Emp extends Model {

@Id
@Column(name="Emp_Id")
public Integer id;
public String emp_name;
public Integer dept_id;
public Integer age;
public String sex;

}

这是empOracle DB 中存在的表,其中包含一些数据:

EMP_ID  NUMBER. EMP_NAME VARCHAR2(20), DEPT_ID NUMBER, AGE NUMBER, SEX VARCHAR2(6)

因为我不知道这个问题的原因,所以我改写了这个线程的标题。

请让我知道如何解决这个问题。

4

2 回答 2

1

这样做的方法是

List<Emp> empList = Emp.all().fetch();
于 2013-01-25T19:05:25.223 回答
1

我会做一个: List<Emp> empList = Emp.findAll();

但我不认为这是实际的问题。问题出在到数据库表的映射中。您的错误信息:

`JPAQueryException occured : Error while executing query from models.Emp: ORA-00904:        "EMP0_"."ID": invalid identifier`

意味着实际查询尝试获取列“ID”而不是您想要的实际列(根据您的注释,@Column(name="Emp_Id"))。

注释没有按预期工作。也许大写/小写字符有问题?

编辑回复:

您的模型类 EMP 从生成唯一标识符 id 的 playframework 父模型类继承。这可能会导致您的问题。

于 2013-01-26T10:25:09.357 回答