【问题标题】:Play Framework PersistenceException播放框架 PersistenceException
【发布时间】: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


【解决方案1】:

@Column(name="xx")

在要映射到表列的模型类中定义的每个变量上方都需要。

【讨论】:

    【解决方案2】:

    你可以使用

    clean 
    compile
    ~run 
    

    如果它不能正常工作,你可以在你的模型类中使用@EntityConcurrencyMode(ConcurrencyMode.NONE)

    【讨论】:

      猜你喜欢
      • 2012-11-30
      • 2013-02-20
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多