Play Framework Error:play.sbt.PlayExceptions

时间:2016-11-14 00:23:52

标签: java scala playframework

我是Play框架的新手。我有一个项目,但它给我带来了问题。

我使用Play Framework 2.5.9和ebean 3.0.2。错误如下:

play.sbt.PlayExceptions$CompilationException: Compilation error[value where is not a member of com.avaje.ebean.Finder[Long,models.Viaje]]
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
    at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27)
    at scala.Option.map(Option.scala:145)
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49)
    at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44)
    at scala.Option.map(Option.scala:145)
    at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44)
    at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40)
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)
    at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17)

生成的错误也与模型类有关。在每个类中,我都定义了以下方法:

public static Finder<Long, Motorista> find = new Finder<Long,Motorista>(Motorista.class);

我按照以下命名法进行任何查询:

Motorista.find.findList (); 

或:

Motorista.find.where (). eq ( "id", 1);

问题是上面的错误总是在我提出错误的那些查询的所有行中出现错误:

value findList is not a member of com.avaje.ebean.Finder [Long, models.Motorista] 

value where is not a member of com.avaje.ebean.Finder [Long, models.Motorista]

我认为这可能是配置问题,尽管该项目对我来说效果很好。

我的build.sbt文件包含以下内容

name:=“”“siiaf”“”

version:=“1.0-SNAPSHOT”

lazy val myProject = (project in file(".")).enablePlugins(PlayJava, PlayEbean)

scalaVersion := "2.11.7"

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs
)
libraryDependencies += "mysql" % "mysql-connector-java" % "5.1.36"

我的plugins.sbt文件包含以下内容:

// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.9")

// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.4")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.8")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")
addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.6")

// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")

// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using
// enablePlugins(PlayEbean).
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.2")

Pleease需要帮助

1 个答案:

答案 0 :(得分:0)

问题在于他在Scala视图中进行查询,例如:

ModelClass.find.where().eq ("id", 1).findList()

根据play framework 2.5.x的文档,这是不可能的:

https://www.playframework.com/documentation/2.5.x/JavaEbean

  

Play已被设计为自动生成getter / setter   确保与期望它们可用的库兼容   在运行时(ORM,Databinder,JSON Binder等)。如果Play检测到任何   在Model中用户编写的getter / setter,它不会生成   getter / setter以避免任何冲突。

     

注意事项:

     

(1)因为编译后发生了Ebean类增强,所以不要   期望Ebean生成的getter / setter在编译时可用   时间。如果您更喜欢直接使用它们进行编码,请添加   getter / setters明确自己,或确保您的模型类   在项目的其余部分之前编译,例如。通过把他们   在一个单独的子项目中。

     

(2)增强直接Ebean字段访问(启用延迟加载)   仅适用于Java类,而不适用于Scala。因此,直接领域   从Scala源文件(包括标准Play模板)访问   不调用延迟加载,经常导致空(无人居住)   实体领域。要确保填充字段,请(a)手动填写   创建getter / setter并改为调用它们,或者(b)确保实体   在访问字段之前已完全填充。

然后,解决方案是在模板中包含以下内容:

@import com.avaje.ebean.Ebean

在模板中创建一个这样的查询:

Ebean.find(classOf[ModelClass]).where().eq("id",1).findList()