Java 如何制作一对一的映射框架

Java 如何制作一对一的映射框架,java,database,jpa,playframework,one-to-one,Java,Database,Jpa,Playframework,One To One,我正在尝试使用playframework在两个表之间设置一对一的映射。我希望在此映射之后为每个用户创建评级列表。然而,我不能。你能帮我吗? 我的两门课是这样的: User.java 封装模型; 导入java.util.*; 导入javax.persistence.*; 导入play.db.jpa.Model; @实体 @表(name=“`user`”) 公共类用户扩展模型{ 公共字符串名称; 公共字符串姓氏; 公共字符串密码; 公共字符串用户名; 公开日期最后登录; @身份证 @生成值 } U

我正在尝试使用playframework在两个表之间设置一对一的映射。我希望在此映射之后为每个用户创建评级列表。然而,我不能。你能帮我吗? 我的两门课是这样的:

User.java

封装模型;
导入java.util.*;
导入javax.persistence.*;
导入play.db.jpa.Model;
@实体
@表(name=“`user`”)
公共类用户扩展模型{
公共字符串名称;
公共字符串姓氏;
公共字符串密码;
公共字符串用户名;
公开日期最后登录;
@身份证
@生成值
}
UserRating.java

封装模型;
导入java.util.*;
导入javax.persistence.*;
导入play.db.jpa.Model;
@实体
@表(name=“`userrating`”)
公共类用户评级扩展模型{
公众双重评级;
@身份证
@生成值
@MapsId
@OneToOne()
@JoinColumn(name=“user\u id”)
公共用户;
}
我的yaml文件是:

User(19):
    name: freud
    surname: lily
    password: x56
    username: freud
    lastlogin: 2010-05-02
User(20):
    name: osman
    surname: özsu
    password: 798
    username: osman
    lastlogin: 2004-12-11


UserRating(1):
    rating: 1.2
    user: User(2)

这是我的用户类的一个示例:

@Entity
@SuppressWarnings("serial")
public class User extends Model implements BasicModel<Long>
{
    @Id
    public Long         idUser;

    @Constraints.Required
    @Column(unique=true)
    public String       mail;

    @ManyToMany(cascade = CascadeType.ALL, targetEntity = Module.class)
    public List<Module> contributors;

    @JsonIgnore
    private String      password;
    @Constraints.Required
    public String       firstName;
    @Constraints.Required
    public String       lastName;

    public static Model.Finder<String, User> find = new Finder<String,User>(
            String.class, User.class);
}
以及:


仅当您希望每个用户只有一个评级时,用户才是id。无论如何,您的类中应该有一个id。

这就是您的yaml的外观:

users:
    - &user1 !!models.User
       name: freud
       surname: lily
       [...]

UserRating:
    rating: 1.2
    user: *user1
&char用于引用对象,*char用于链接引用。 我发布了一个关于哪个可能更有用的答案:
请注意,ID是自动生成的,无需指定它们。

本教程适用于我:

它涵盖了OneTONE关系的两种不同情况:

  • 单向一对一关系
  • 双向一对一关系

我不知道这是否是源代码的副本,但注释位置不正确。它们必须位于与其相关的属性之前,而不是之后。因此User类中的\@Id和\@GeneratedValue不正确。我很确定这段代码甚至没有编译。实际上,我不知道如何使用\@Id和\@GeneratedValue注释。我应用了你的建议。但是,我遇到了另一个错误:JPA错误发生JPA错误(无法构建EntityManagerFactory):外键引用models.UserFrom models.UserRating的用户列数错误。应该是2I在UserRating的JoinColumn中创建一个类型。它是id\u user而不是user\u id。您应该检查数据库中生成的字段的名称。我编辑了代码,更改了类型。然而,新的错误是这样的:执行异常RuntimeException发生:无法加载fixture initial-data.yml:org.hibernate.PersistentObjectException:传递给persist:models的分离实体。用户我认为这是关于在yaml文件中为“User”对象赋值。是吗?我忘了说不需要使用\@Id注释,因为它会自动创建Id。我编辑了代码。我在yaml文件中写了这些行。它给出的错误如下:执行异常RuntimeException Occursed:无法加载fixture initial-data.yml:null;无法为标记构建java对象:yaml.org,2002:models.User;exception=找不到类:models.User我想这是关于playframework的版本。我使用1.2.5。你的建议对我的版本无效。是否正确?如果您正在使用1.2.5,那么可能我的所有答案都不适用于您,因为我正在使用2.3。您应该在文章的开头进行编辑以说明这一点。很抱歉没有在开头说明版本。关于如何为play 1.2.5版本的“用户”对象赋值,您有什么建议吗@Moebius@michaelscolfield对不起,我对第一场比赛一无所知。好的,没问题。谢谢你的努力。
@Entity
@Table(name = "`userrating`")
public class UserRating extends Model {
    public double rating;    

    @OneToOne()
    @JoinColumn(name="id_user")
    public User user;
}
users:
    - &user1 !!models.User
       name: freud
       surname: lily
       [...]

UserRating:
    rating: 1.2
    user: *user1