gpt4 book ai didi

java - Play Framework,OneToOne 关系不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:42 24 4
gpt4 key购买 nike

我正在使用 Play Framework (Java 风格)用于项目。在这个项目中,我有两个模型,我想在它们之间创建一个 OneToOne 关系。

我有一个 User 模型和一个 UserLegalName 模型。我希望每个 User 都有一个 UserLegalName 模型。

User model code
UserLegalName model code

问题是 UserUserLegalName 没有连接到“相关”
UserLegalName Table
user_user_id 列始终为 NULL。我已经为 UserLegalName 中的 User 尝试了 JoinColumn(name = "user_id") 但这也不起作用
UserLegalName Table

编辑:

在接受@Sivakumar 的回答并修复我的代码后,UserLegalName 现在可以正确存储 UserLegalName Table
但是,当我尝试为用户获取 UserLegalName 时,它仍然显示为 null

User.find.where().eq("userId", userId).findUnique()

哪个返回

{"userId":"f5ea6d1d-d22d-4127-b6e7-0b3d0446edfe","legalName":null}

编辑 2:

您可以将 fetch=FetchType.EAGER 添加到 User 模型中的 OneToOne 注释,这将获取 UserLegalName 每次。然而实际上 User 模型要复杂得多。它拥有更多的关系。

有没有其他方法可以做到这一点?通过将获取类型保持为 EAGER,它可能会创建低效查询(例如:我只希望用户电子邮件在一个单独的表中,但它也会查询 User_Legal_Name 表)

最佳答案

我使用了您在上面链接中发布的两个模型并成功测试。正如@Andrei 在他的评论中提到的,问题不在于映射,而应该是你保存它们的方式。以下是我用于测试的代码片段。

用户

@Entity
public class User extends Model{

/ ..... fields as it is in your post

public User(String user_id){
this.userId = user_id;
}

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

public static User findByUserID(String user_id){

/* Your models already in bi-directional relationship, so there is no need for external `fetch`, You can directly get `UserLegalName` object from `User`
model if there is any match found on `UserLegalName` for the input. */

return find.where().eq("userId",user_id).findUnique();
}
}

UserLegalName

@Entity
public class UserLegalName extends Model {

/ ..... fields as it is in your post

public UserLegalName(User user_id, String first_name, String last_name){
this.user = user_id;
this.firstName = first_name;
this.lastName = last_name;
}
}

Controller

public class TestController extends Controller {

public static Result insertUser(String user_id, String fname, String lname)
{
User user = new User(user_id);
UserLegalName legal = new UserLegalName(user,fname,lname);
user.legalName = legal;
user.save();

return ok(user.legalName.firstName);
}

public static Result getUser(String user_id)
{
User user = User.findByUserID(user_id);

return ok(user.legalName.firstName);
}
}

路线

GET      /test/:userID/:fname/:lname       controllers.TestController.insertUser(userID : String, fname : String, lname : String)

GET /user/:userID controllers.TestController.getUser(userID : String)

关于java - Play Framework,OneToOne 关系不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27053097/

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