将play框架1.2.5与现有数据库一起使用

时间:2013-01-25 15:56:06

标签: java jpa playframework playframework-1.x

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

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

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;

}

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

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

我已经改述了这个帖子的标题,因为我不知道这个问题的原因。

请告诉我如何解决此问题。

2 个答案:

答案 0 :(得分:1)

这样做的游戏方式是

List<Emp> empList = Emp.all().fetch();

答案 1 :(得分:1)

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

但我不认为这是实际问题。问题在于映射到db表的某处。您的错误消息:

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

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

注释不能按预期工作。可能是大写/小写字符有问题吗?

编辑回复:

您的模型类EMP继承自playframework父模型类,该类生成唯一标识符ID。这可能会导致你的问题。