【问题标题】:Join table issue in Spring Data JPASpring Data JPA 中的连接表问题
【发布时间】:2017-12-10 03:50:24
【问题描述】:

我正在尝试创建一个包含两个表的数据视图。我通过使用spring data JPA join成功实现了连接并且数据正确显示。这里我的问题是,当我只从一个表调用findAll() 方法时,它还返回所有数据,包括连接表,

我加入了表用户模型类,如:

@Entity
@Table(name = "users")
public class Users implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;

@Column(name = "username")
public String username;

@Column(name = "password")
public String password;

@Column(name = "privid")
public Integer privid;

@OneToMany(cascade = CascadeType.ALL,mappedBy="pid")
public Set<Privillages> priviJoin;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

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

public String getPassword() {
    return password;
}

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

public Integer getPrivid() {
    return privid;
}

public void setPrivid(Integer privid) {
    this.privid = privid;
}

public Set<Privillages> getPriviJoin() {
    return priviJoin;
}

public void setPriviJoin(Set<Privillages> priviJoin) {
    this.priviJoin = priviJoin;
}
public Users() {
}
}

我的第二个模型特权就像,

@Entity
@Table(name = "Privillages")
public class Privillages implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer Id;

@Column(name = "pname")
public String pname;

@ManyToOne(optional = false)
@JoinColumn(name = "pid", referencedColumnName = "privid")
public Users pid;

public Integer getId() {
    return Id;
}

public void setId(Integer id) {
    Id = id;
}

public String getPname() {
    return pname;
}

public void setPname(String pname) {
    this.pname = pname;
}

public Users getPid() {
    return pid;
}

public void setPid(Users pid) {
    this.pid = pid;
}
public Privillages(){
}
}

而存储库包含,

@Query("select u from Users u JOIN FETCH u.priviJoin p")
Set<Users> findByUsername();

这些都是我的代码,我在这里添加。问题是,join 可以正常使用预期的结果集。但是当我调用 findAll() 方法时,它会返回所有结构,包括两个连接表。

我把我的 findAll 函数称为,

@RequestMapping("/check")
    public List<Users> check() {
                        return (List<Users>) userRepo.findAll();
    }

但结果和我之前提到的一样。这里我添加了它的截图,

在这个图中我们可以看到它返回了两个表的值而不是用户表的数据。

为什么会这样?

【问题讨论】:

    标签: join spring-data


    【解决方案1】:

    您定义了您的域类型 Users 以包含一个引用,以便它按指定加载。

    如果您想要类似于 Users 对象但没有引用的东西,您有两种选择:

    1. Users 类型更改为不包含引用。

    2. 使用不同的类型,类似于Users,但没有引用。有多种方法可以做到这一点,但在当前情况下,最简单和最有帮助的可能是使用投影。见https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

    【讨论】:

      猜你喜欢
      • 2018-11-30
      • 1970-01-01
      • 2021-12-15
      • 2018-11-14
      • 1970-01-01
      • 2018-11-17
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多