将主键映射到 JPA 中的复合键

Map primary key to composite key in JPA

我有 2 个 table,即用户和 user_session。

用户 table 将 user_id 作为主键,它是 user_session table 的引荐来源。

Plus user_session 有复合键,包括 session_intime 和 user_id。

我在 JPA 中设计了我的实体。现在我想映射这两个实体。我试图映射这两个 tables。但是我的应用程序构建失败了。你能帮帮我吗?

@Entity
@Table(name="user")
public class User {
    @Id
    @Email
    @Column(name = "user_id")
    private String userId;

    @Column(name = "password")
    private String password;

    @Column(name = "fname")
    private String fname;

    @OneToMany(fetch = FetchType.LAZY)
    @JoinColumn(name = "userId", referencedColumnName = "user_id")
    private UserSession userSession;
}

@Entity
@Table(name="user_session")
public class UserSession{
    @EmbeddedId
    private UserSessionPK userSessionPK;

    @Column(name = "remote_ip")
    private String remoteIp;
}

@Embeddable
public class UserSessionPK implements Serializable {
    private static final long serialVersionUID = 1L;

    @Column(name = "user_id")
    private String userId;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "time_in")
    private Date timeIn;
}

我想将用户 table 的 user_id 映射到 UserSessionPK 的 user_id。我是 JPA 的新手,所以我不知道如何使用可嵌入 class.

进行映射

删除 mappedBy 属性。当您具有双向关系时使用此属性来指示关系的哪一方是所有者。

但是您需要设置外键又名 JoinColumn

@JoinColumn("user_id")
@OneToMany(fetch = FetchType.LAZY)
private UserSession userSession;