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

问题描述 投票:0回答:1

我有2个表,即user和user_session。

用户表具有user_id作为主键,它是对user_session表的引用。

加上user_session具有包含session_intime和user_id的复合键。

我已经在JPA中设计了我的实体。现在,我要映射这两个实体。我试图映射这两个表。但是我的应用程序构建失败,提示org.hibernate.MappingException:损坏的列映射。你能帮我吗?

@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;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "userSessionPK.userId")
    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;
}

我想将User表的user_id映射到UserSessionPK的user_id。我是JPA的新手,所以我不知道如何使用可嵌入的类进行映射。

spring-boot hibernate spring-data-jpa hibernate-mapping
1个回答
0
投票
但是您需要设置外键又名JoinColumn

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

© www.soinside.com 2019 - 2024. All rights reserved.