【问题标题】:The role column does not appear in the Postgresql table角色列未出现在 Postgresql 表中
【发布时间】:2021-01-19 20:12:57
【问题描述】:

我是 Spring Boot 和 jpa 的新手,并创建了这个名为 user 的实体,该实体将 @OneToMany 映射到另一个角色表。当我启动项目时,除了角色之外的每一列都会出现。我不明白我在这里做错了什么。我的角色实体看起来像这样 -

角色

package com.userservice.usermanagement.models;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;




@Entity
@Table(name = "roles")
public class Role2 {
    /**
     * Model for role with all the attributes
     */
      @Id
      @GeneratedValue
      @Column(name = "role_id", nullable = false, length = 1024)
      private int role_id;   
      
      @Column(name = "name", nullable = false, length = 1024)
      private String name;

      public Role2() {

      }

    public int getRole_id() {
        return role_id;
    }

    public void setRole_id(int role_id) {
        this.role_id = role_id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

      
    }

和用户

package com.userservice.usermanagement.models;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;




@Entity
@Table(name = "users")
public class User2 {
    /**
     * User model
     */ 
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "id", nullable = false, length = 1024)
      private int id;     
      @Column(name = "username", nullable = false, length = 1024)
      private String username;
      @Column(name = "email", nullable = false, length = 1024)
      private String email;   
      @Column(name = "password", nullable = false, length = 1024)
      private String password;
      @Column(name = "customername", nullable = false, length = 1024)
      private String customername;    
      @Column(name = "customerid", nullable = false, length = 1024)
      private String customerid;      
      @Column(name = "description", nullable = false, length = 1024)
      private String description;      
     
      @OneToMany(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
      @JoinTable(name="user_role", joinColumns=@JoinColumn(name="id"), inverseJoinColumns=@JoinColumn(name="role_id"))
      private Set<Role2> roles = new HashSet<>();;
      
      public User2() {
      }

      public User2(String username, String email, String customername,String customerid,String description, String password) {
        this.username = username;
        this.email = email;
        this.customername = customername;
        this.customerid = customerid;
        this.description = description;
        this.password = password;
      } 
      

    
        public int getId() {
            return id;
        }

      public void setId(int id) {
        this.id = id;
      }
      
      
      public String getUsername() {
        return username;
      }

      public void setUsername(String username) {
        this.username = username;
      }

      
      public String getEmail() {
        return email;
      }

      public void setEmail(String email) {
        this.email = email;
      }

     
      public String getPassword() {
        return password;
      }

      public void setPassword(String password) {
        this.password = password;
      }

     
      
      public String getCustomername() {
        return customername;
    }

    
    public void setCustomername(String customername) {
        this.customername = customername;
    }

    
    public String getCustomerid() {
        return customerid;
    }
    
    
    public void setCustomerid(String customerid) {
        this.customerid = customerid;
    }

    
    public String getDescription() {
        return description;
    }
    
    
    public void setDescription(String description) {
        this.description = description;
    }
    
    
    
     public Set<Role2> getRoles() {
        return roles;
      }
    
    public void setRoles(Set<Role2> roles) {
        this.roles = roles;
    }
    
    


    }

在用户中,如果我使用可连接和发布数据,其他所有内容都会显示,但 user_role 和角色为空。如果我删除可连接的列以在用户表本身中包含该列,则用户表中缺少角色列。有人能指出我正确的方向吗?

【问题讨论】:

  • OneToMany 表示例如角色将拥有用户的引用,这是你想要的吗?
  • 您好宏,感谢您回复我想要的是一个用户可以拥有多个角色。我不确定我是否完全理解您评论中的参考部分
  • 好的,角色属于一个用户?
  • 是的,该角色属于一个用户
  • 如果是去掉JoinTable的情况,在角色表中看不到user_id?

标签: spring-boot jpa


【解决方案1】:

你需要删除

@JoinTable(name="user_role", joinColumns=@JoinColumn(name="id"), inverseJoinColumns=@JoinColumn(name="role_id"))

因为它是针对多对多关系的,而只是放:

@JoinColumn(name="user_id")

这样,您将在 Role 表中拥有一个 user_id 字段,并且它会起作用。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 2014-12-07
    • 2017-01-26
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 2022-01-10
    相关资源
    最近更新 更多