【发布时间】:2014-08-18 16:44:14
【问题描述】:
我正在尝试使用 Play 框架 (Java) 从几个 Oracle 表中简单地读取一些数据,以后甚至可能使用一些复杂的查询。我正在学习教程,但在检索数据时遇到了一些问题。
我的模型类如下所示:
package models;
import java.util.ArrayList;
import java.util.List;
import play.libs.F;
import javax.persistence.*;
import com.avaje.ebean.*;
import play.db.ebean.*;
@Entity
@Table(name="TABLESPACE.CAT_BONDS")
public class Cat_Bond extends Model {
@Id
public String symbol;
public String database;
public String tickType;
public String assetClass;
public String sourcePlatform;
public String sourceExchange;
public static Finder<String, Cat_Bond> find = new Finder<String, Cat_Bond>(String.class,Cat_Bond.class);
public Cat_Bond(){}
public Cat_Bond(String symbol, String database, String tickType, String assetClass,
String sourcePlatform, String sourceExchange) {
this.symbol = symbol;
this.database = database;
this.tickType = tickType;
this.assetClass = assetClass;
this.sourcePlatform = sourcePlatform;
this.sourceExchange = sourceExchange;
}
/*
* retrieve all rows from the 'cat_bonds' table
*/
public static List<Cat_Bond> findAll(){
//return new ArrayList<Cat_Bond>(cat_bond);
return find.all();
}
/*
* Find by EAN
*/
public static Cat_Bond findByEan(String symbol){
return find.where().eq("symbol", symbol).findUnique();
}
}
我的控制器类:
package controllers;
import java.util.List;
import views.html.*;
import models.Cat_Bond;
import play.data.Form;
import play.mvc.*;
public class Cat_Bonds extends Controller {
private static final Form<Cat_Bond> cat_bondForm = Form.form(Cat_Bond.class);
public static Result list(){
List<Cat_Bond> cat_bond = Cat_Bond.findAll();
return ok(list.render(cat_bond));
}
application.conf 条目看起来像:
#Oracle
db.default.driver=oracle.jdbc.OracleDriver
db.default.url="jdbc:oracle:thin:@server.uk.net.intra:port/ALIAS"
db.default.user=user
db.default.password=pass
# Evolutions
# ~~~~~
# You can disable evolutions if needed
evolutionplugin=disabled
问题是在控制器中调用 list 然后在模型中调用findAll() 时出现错误:
**[PersistenceException: Query threw SQLException:ORA-00904: "T0"."SOURCE_EXCHANGE": invalid identifier Bind values:[] Query was: select t0.symbol c0, t0.database c1, t0.tick_type c2, t0.asset_class c3, t0.source_platform c4, t0.source_exchange c5 from TABLESPACE.CAT_BONDS t0 ]**
【问题讨论】:
-
检查该查询中的列名是否正确并且确实存在于数据库表中。你能展示一下表格结构吗?
-
嗨 Salem,列名是相同的,我必须为模型类中定义的每个变量做的是插入 @Column(name="xxx") 例如 @Column(name="Symbol ”)。这奏效了。但是看看播放文档和示例,这不是必需的。
-
我不了解 Oracle,但有些 DBMS 区分大小写,因此“符号”可能与“符号”不同。
标签: java oracle playframework persistence ebean