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

我是JPA / Hibernate的新手,我正在创建一个简单的连接,用于在不同的表中获取一些数据让我们看到如下:

http://img4.mukewang.com/63186b620001828302210210.jpg

目的是根据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“:标识符无效


需要帮助,提前致谢,


注意:我没有特权改变桌子。


慕尼黑8549860
浏览 119回答 3
3回答

幕布斯7119047

尝试指定联接列:@OneToOne@JoinColumn(name = "username", referencedColumnName = "username")private profile profile;你真的不需要这里。@MapsId

牧羊人nacy

不要忘记禁用JoinColumn的可插入和可更新@OneToOne@JoinColumn(name = "username", referencedColumnName = "username", updatable = false, insertable = false)private profile profile;

拉风的咖菲猫

我建议创建第三个表,并为您的表建立关系@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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java