Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有外键的JPA OneToOne关联总是失败_Java_Spring_Hibernate_Jpa - Fatal编程技术网

Java 没有外键的JPA OneToOne关联总是失败

Java 没有外键的JPA OneToOne关联总是失败,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我是JPA/Hibernate新手, 我正在创建一个简单的连接,以获取不同表中的一些数据 让我们这样看: 其目的是基于M_USER.username列获取M_配置文件数据,但您可以清楚地看到,M_配置文件表中没有外键 我只是尝试使用下面的代码,但没有结果,总是得到错误 用户实体类 @Entity @Table(name = "M_USER") public class User { @Id @Column(name = "id") privat

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

其目的是基于M_USER.username列获取M_配置文件数据,但您可以清楚地看到,M_配置文件表中没有外键

我只是尝试使用下面的代码,但没有结果,总是得到错误

用户实体类

@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;
    }
}
配置文件实体类

@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\u USERNAME”:无效标识符

需要帮助,提前谢谢


注:我没有权利更改这张桌子

尝试指定联接列:

@OneToOne
@JoinColumn(name = "username", referencedColumnName = "username")
private profile profile;

此处不需要
@MapsId

尝试指定联接列:

@OneToOne
@JoinColumn(name = "username", referencedColumnName = "username")
private profile profile;

您不需要在此处使用
@MapsId

我建议为您的表创建第三个具有关系的表

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

我建议为您的表创建具有关系的第三个表

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

我不确定,但可能有必要将注释添加到getter中。它肯定会起作用。。代码已在当前环境Private profile上运行;-->使其成为资本坑打字错误..我的已经是私有配置文件。。我不确定,但可能有必要将注释添加到getter中。它肯定会起作用。。代码已在当前环境Private profile上运行;-->使其成为资本坑打字错误..我的已经是私有配置文件。。无法工作得到错误..从users user0_u0中选择user0_0.profile作为profile1_14_u14等,其中user0_0.username=?;错误消息=ORA-00904:“M_USER0_uu”。“PROFILE”:无效标识未工作,出现错误..从用户USER0_u选择USER0_u.PROFILE作为profile1_14_uu等,其中USER0_u.username=?;错误Msg=ORA-00904:“M_用户0_”。“配置文件”:无效标识我无权更改或创建表。。因此,与isi一样,该表也无权更改或创建该表。。所以这张桌子还是原样