亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

沒有外鍵的 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 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號