将主键映射到 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;
我有 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;