gpt4 book ai didi

java - 在 Java Play 中使用 Scala 控制台查询数据库

转载 作者:行者123 更新时间:2023-11-30 07:53:10 25 4
gpt4 key购买 nike

我是 Play 新手,我正在尝试测试其 shell(和 Scala 控制台)以从数据库查询值。我正在使用 Play 2.4.3 和 H2(数据库)

从这里:https://playlatam.wordpress.com/2012/04/01/play-framework-2-quicktip-interactively-play-with-your-application-from-the-scala-console/在这里:https://github.com/playframework/playframework/issues/4593到目前为止我已经尝试过但没有成功:

进入控制台

./activator shell

然后

console

进入 Scala 控制台后,我会:

import play.api._
val env = Environment(new java.io.File("."), this.getClass.getClassLoader, Mode.Dev)
val context = ApplicationLoader.createContext(env)
val loader = ApplicationLoader(context)
val app = loader.load(context)
Play.start(app)
import Play.current

我有名为“问题”和“选择”的模型,因此我将它们导入:

import models._

(也尝试过,models.Question等组合)。然后,当我尝试通过执行(和类似的变体)来查询它时:

val questions = Question.all()

我收到错误

<console>:8: error: value all is not a member of object models.Question
val questions = Question.all()
^

作为引用,您可以在下面找到我的问题模型:

package models;

import java.util.*;
import javax.persistence.*;

import com.avaje.ebean.Model;
import play.data.format.*;
import play.data.validation.*;

@Entity
public class Question extends Model {

@Id
public Integer id;

@Constraints.Required
public String question_text;

@Constraints.Required
@Formats.DateTime(pattern="dd/MM/yyyy")
public Date pub_date = new Date();

@OneToMany(mappedBy = "question")
public List<Choice> choices = new ArrayList<>();
}

理论上,我已经使用激活器运行命令(它为我提供了更新数据库的脚本)将此方案添加到了数据库中。我正在使用基于文件的 H2。

此外,我尝试添加一个新问题

val questions = models.Question(1, "is this a question", format.parse("21-03-2011"))

格式为:

val format = new java.text.SimpleDateFormat("dd-MM-yyyy")

我收到错误:

   <console>:8: error: object models.Question is not a value
val questions = models.Question(1, "is this a question", format.parse("21-03-2011"))

问题是:那么,如何添加值并使用 Scala 控制台查询它们呢?

编辑:为了以防万一,您可以添加已接受的答案中所示的项目,并可以使用 .save() 方法将它们保存到数据库中。

最佳答案

我认为您正在混合 Java 和 Scala 类,以及使用两者的方式。

val questions = Question.all()

这不起作用,因为 Question 类没有任何名为 all 的静态方法(该方法属于 Mode.Finder)。因此,您必须在类中创建一个查找器,并可能创建这些方法:

public class Question extends Model {
// (...)
public static final Finder<Integer, Question> find =
new Finder<>(Question.class);

public static List<Question> all() {
return find.all();
}

}

val questions = Question.all
// or
val questions = Question.find.all

您可以在 Model.Finder documentation 中找到更多信息.

val questions = models.Question(1, "is this a question", format.parse("21-03-2011"))

只有当 Question 是 Scala 案例类时,此语法才可以开箱即用。同样,您必须使用 new,如果您不想在之后指定每个参数,请使用您要使用的参数实现一个新的构造函数:

val question = new Question
question.id = 1
question.question_text = "is this a question"
// (...)

关于java - 在 Java Play 中使用 Scala 控制台查询数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com