为了账号安全,请及时绑定邮箱和手机立即绑定

没有外键的 JPA 一对一关联总是失败

没有外键的 JPA 一对一关联总是失败

慕尼黑8549860 2022-09-07 17:57:42
我是JPA / Hibernate的新手,我正在创建一个简单的连接,用于在不同的表中获取一些数据让我们看到如下:目的是根据M_USER.username列获取M_PROFILE数据,但很明显,您会看到M_PROFILE表中没有外键。我只是尝试使用下面的代码,但没有结果,总是得到错误。用户实体类@Entity@Table(name = "M_USER")public class User {        @Id        @Column(name = "id")        private String uuid;        @Column(name = "email")        private String email;        @Column(name = "username")        private String username;        @OneToOne(fetch = FetchType.LAZY)        @MapsId("username")        private Profile profile;        public String getId() {            return id;        }        public void setId(String id) {            this.id = id;        }        public String getEmail() {            return email;        }        public void setEmail(String email) {            this.email = email;        }        public String getUsername() {            return username;        }        public void setUsername(String username) {            this.username = username;        }        public Profile getProfile() {            return profile;        }        public void setProfile(Profile profile) {            this.profile = profile;        }    }配置文件实体类@Entity@Table(name = "M_PROFILE")public class Profile {    private String username;    private String phone;    private String address;    @Id    @Column(name = "username", nullable = false)    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    @Basic    @Column(name = "phone")    public String getPhone() {        return phone;    }    public void setPhone(String phone) {        this.phone = phone;    }    @Basic    @Column(name = "address")    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}我在打电话时遇到不同的错误User user = userRepository.findByUsername("aswzen");String phone = user.getProfile().getPhone();例如这个。“USER0_”。PROFILE_USERNAME“:标识符无效需要帮助,提前致谢,注意:我没有特权改变桌子。
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

尝试指定联接列:


@OneToOne

@JoinColumn(name = "username", referencedColumnName = "username")

private profile profile;

你真的不需要这里。@MapsId


查看完整回答
反对 回复 2022-09-07
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

不要忘记禁用JoinColumn的可插入和可更新


@OneToOne

@JoinColumn(name = "username", referencedColumnName = "username", updatable = false, insertable = false)

private profile profile;


查看完整回答
反对 回复 2022-09-07
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

我建议创建第三个表,并为您的表建立关系


@Entity

@Table(name = "M_USER")

public class User {


@OneToOne(fetch = FetchType.LAZY)

@JoinTable(

name = "user_profile",

joinColumns = @JoinColumn(name="user_id"),

inverseJoinColumns = @JoinColumn(name="profile_username")

 )

private Profile profile;



UPDATE user_profile 

SET user_id = (

    SELECT id

    FROM M_USER

);



UPDATE user_profile 

SET profile_username = (

    SELECT username

    FROM M_USER

);


查看完整回答
反对 回复 2022-09-07
  • 3 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信