gpt4 book ai didi

database - 如何将数据库条目加载到我的 Scala 模板中?

转载 作者:搜寻专家 更新时间:2023-10-30 23:44:34 24 4
gpt4 key购买 nike

我正在使用 play 2.3.8 并构建一个程序,您可以在其中提出问题并回答问题。我有几个不同的用户,所以我使用他们唯一的电子邮件作为数据库中的 ID。

问题/答案有一个 ownerID,以显示是谁写的。

我的用户是这样存储在数据库中的:

Email           Name Password
bob@mail.com Bob secret

我的问题是这样存储在数据库中的:

QUESTION_ID                             QUESTION_TEXT       VOTE_SCORE      OWNER_ID        PAGE  
77b7f88a-41df-4d68-9f89-de508fce8f71 How tall is tall? 1228 bob@mail.com 1

我的 Controller 类,它从数据库中收集问题/答案并将列表发送到 View 类:

public static List<Question> questionListAll = new ArrayList<Question>();
public static List<Answer> answerListAll = new ArrayList<Answer>();

public static Result index() {
questionListAll.clear();
answerListAll.clear();

// Get all questions from DB
for (Question questionItem : Question.find.all()) {
questionListAll.add(questionItem);
}

// Get all answers from DB
for (Answer answerItem : Answer.find.all()) {
answerListAll.add(answerItem);
}

Collections.sort(questionListAll, Collections.reverseOrder());
Collections.sort(answerListAll, Collections.reverseOrder());

return ok(views.html.index.render(questionListAll, answerListAll));
}

用户.java:

// FIXME Dont really save the password as String...
@Id
public String email;
public String name;
public String password;
(...)

问题.java:

@Entity
public class Question extends Model implements Comparable<Question> {
@Id
public String questionID;
public String questionText;
public Integer voteScore;
public String ownerID;
public Integer page;
(...)
}

在我的 View 类中,我通过使用 @answer.ownerID 向用户显示问题和问题背后的用户......但是当我使用电子邮件字段作为 ID 时,条目类似于:

“有多高?” - bob@mail.com

我想要的是:

“有多高?” - Bob Ross(使用他们的名字而不是他们的电子邮件)

我知道我可以简单地在我的 Controller 中找到所有问题及其所有者,然后将用户放入另一个列表,从那里我可以使用 @users.username,但这意味着我总是必须查找所有用户,将他们放入列表中,...

那么是否可以查看数据库,使用 ownerID 并在 View 类中获取用户名?

或更笼统:您能否从 View 类本身查找 View 类的数据库条目?

最佳答案

您可以使用 JPA 2.0 添加映射以在您的 View 中实现您想要的,然后您可以使用 @question.owner.name@answer.owner.name .

User.java

[...]
@Id
@Column(name="user_id")
public Long userId;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "owner", cascade = CascadeType.ALL)
public List<Question> questionList;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "owner", cascade = CascadeType.ALL)
public List<Answer> answerList;
[...]

Question.java

[...]
@Id
@Column(name="question_id")
public Long questionId;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="user_id", nullable = false)
public User owner;

// @OneToMany: ORM join relationship, one Question to many Answers
// FetchType.LAZY: ORM will not fetch from db until you use it
// CascadeType.ALL: any changes to question will be propagated
// onQuestionDelete: all answers associated with the question will be deleted
// onQuestionUpdateAnswerList: any updates made will reflect on db
// mappedBy: Question object variable name on Answer object for ORM to make a connection
@OneToMany(fetch = FetchType.LAZY, mappedBy = "question", cascade = CascadeType.ALL)
public List<Answer> answerList;
[...]

Answer.java

[...]
@Id
@Column(name="answer_id")
public Long answerId;

// FetchType.EAGER: ORM will fetch this from db when Answer is fetch
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="user_id", nullable = false)
public User owner;

// @ManyToOne: ORM join relationship, many Question to one Answer
// @JoinColumn: name, pk column name of Question; nullable false, required constraint;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="question_id", nullable = false)
public Question question;
[...]

关于database - 如何将数据库条目加载到我的 Scala 模板中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30596419/

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