Noa*_*ert 8 java sql database jpa playframework
我正在为项目使用Play Framework(Java风格).在这个项目中,我有两个模型,我想建立一个OneToOne关系.
我有一个User模型和一个UserLegalName模型.我希望每个User人都有一个UserLegalName模特.
问题在于,User与UserLegalName不相关的"相关"

该user_user_id列始终是NULL.我已尝试JoinColumn(name = "user_id")过User,UserLegalName但这也不起作用

在接受@Sivakumar回答并修复我的代码后,UserLegalName现在正确存储

然而,当我试图获得UserLegalName一个用户,它仍然出现null
User.find.where().eq("userId", userId).findUnique()
Run Code Online (Sandbox Code Playgroud)
哪个回报
{"userId":"f5ea6d1d-d22d-4127-b6e7-0b3d0446edfe","legalName":null}
Run Code Online (Sandbox Code Playgroud)
您可以添加fetch=FetchType.EAGER到OneToOne注释中的User模型,并且将获取UserLegalName每一次.但实际上User模型要复杂得多.它拥有更多的关系.
有没有不同的方法来做到这一点?通过保留fetch类型,因为EAGER它可能会创建低效的查询(EX:我只希望用户通过电子邮件发送,在单独的表中,但它也会查询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();
}
}
Run Code Online (Sandbox Code Playgroud)
用户法定名称
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
控制器
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);
}
}
Run Code Online (Sandbox Code Playgroud)
路线
GET /test/:userID/:fname/:lname controllers.TestController.insertUser(userID : String, fname : String, lname : String)
GET /user/:userID controllers.TestController.getUser(userID : String)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
513 次 |
| 最近记录: |