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

标签 java spring hibernate jpa

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

enter image description here

目的是根据 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": invalid identifier

需要帮助,提前致谢,

注意:我没有权限更改表格..

最佳答案

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

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

关于java - 没有外键的 JPA OneToOne 关联总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55392864/

相关文章:

java - 检查两条有限线是否相交

java - 为规则文件中声明的类型定义方法

java - 找不到类 org.apache.commons.dbcp.BasicDataSource

mysql - 如何在多列上创建索引

java - Java 中 PriorityQueue 和 TreeSet 的区别?

java - 为什么 Java 使用 (hash & 0x7FFFFFFF) % tab.length 来决定键的索引?

java - 构建一个测试,该测试使用在本地主机上运行的基于 Spring 的 REST API URL 进行测试

java - Spring 等价于 Seam 的 @Factory 注解

java - Hibernate 如何在@OneToMany 映射中找到集合的泛型类型?

java - 将 Jersey 与 hibernate DAO 一起使用的正确方法是什么?