当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA Join中的错误-一到多关联

吕树
2023-03-14
@Entity
@Table(name = "users")
public class Users implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
public String username;
public String password;
public Integer privid;

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

public Integer getId() {
    return id;
}
public void setId(Integer id) {
    this.id = id;
}
@Column(name = "username")
public String getUsername() {
    return username;
}
public void setUsername(String username) {
    this.username = username;
}
@Column(name = "password")
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}

@Column(name = "privid")
public Integer getPrivid() {
    return privid;
}
public void setPrivid(Integer privid) {
    this.privid = privid;
}

public Collection<Privillages> getPriviJoin() {
    return priviJoin;
}
public void setPriviJoin(Privillages priviJoin) {
    this.priviJoin = (Collection<Privillages>) priviJoin;
}

public Users() {
}
@Override
public String toString() {
    return String.format("Users[id=%d, username='%s', password='%s']", id, 
username, password);
}
}
@Entity
@Table(name = "privillages")
public class Privillages implements Serializable {

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

public String pName;


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

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

@Column(name = "pname")
public String getPname() {
    return pname;
}
public void setPname(String pname) {
    this.pname = pname;
}

@Column(name = "pid")
public Users getPid() {
    return pid;
}
public void setPid(Users pid) {
    this.pid = pid;
}

public Privillages(){
} 
}
public interface UsersRepository extends CrudRepository<Users, Integer> 
{   
    @Query(value ="SELECT u.*,p.*  FROM users u INNER JOIN privillages p ON 
    u.privid=p.pid", nativeQuery=true)
    List<Users> findByUsername();
}
@RequestMapping(value = "/joinResult", method = RequestMethod.GET)
public ModelAndView joinResultShow(Model model)
        {
            List<Users> use = new ArrayList<Users>(); 
            use = (List<Users>) userRepo.findByUsername();
            model.addAttribute("joinData",use);
            ModelAndView viewObj = new ModelAndView("fleethome");
            return viewObj;
        }
 <div th:each= "user: ${joinData}">
    <span th:text="${user.username}">
    </span>
    <span th:text="${user.pname}">
    </span>
</div>

我还尝试了一些非本地查询,

@Query("SELECT u.username,p.pname  FROM Users u INNER JOIN Privillages p ON 
u.privid=p.pid")

但这也显示了“JOIN预期的路径![SELECT u.username,p.pname FROM com.central.model.users u INNER JOIN Privillages p ON u.privid=p.pid]”

共有1个答案

曹和正
2023-03-14

用户可以有很多特权…你似乎不能指望一直只得到一个。

坚持jpa查询,并将其编写为:

@Query("SELECT u  FROM Users u inner join fetch u.priviJoin")

然后在您的视图中,您必须添加另一个循环:

<div th:each= "user: ${joinData}">
    <span th:text="${user.username}">
    </span>
    <div th:each="priv: ${user.privJoin}">
      <span th:text="${priv.pname}">
      </span>
    </div>
</div>
 类似资料:
  • 我希望在消费者和政策这两个实体之间建立一对多关系。一个消费者应该有几个政策。 这是我想要的一个消费JSON对象的例子: 这就是我到目前为止所做的: 政策实体 消费者实体 我想没那么难,但我已经试了几个小时了,还是做不到。我刚到Spring,所以如果有人能帮助我,我会非常感激!

  • 我在Django中创建了一个数据模型,它具有多对一关系(N个主题对1个用户),如下所示: 来自django。db从django导入模型。contrib。auth。模型导入用户 当我尝试在“管理”页面中加载数据模型时,出现以下错误: 我错过了数据模型中的什么吗? 谢谢。

  • 下面是我的配置:

  • 我在Spring Data JPA中有两个实体: 目标是获取与user\u id相关的所有税款: User.java 税务ayment.jva 我不想要一个太多的注释从User.java和列映射在纳税user_id。 规格等级如下: 根据我获取所有与user\u id相关的税款的目标,规范是正确的还是错误的?

  • 我正在构建一个小应用程序,以便在Laravel7中试验多对多关系。此应用程序涉及项目和用户(多对多)。 经过身份验证的用户可以创建新项目。每个项目都有自己的页面。在项目页面上,将呈现一个列表,其中包含作为该项目成员的每个用户的名称,在每个名称旁边是一个按钮,该按钮将从该项目中删除特定用户/成员。 现在,我被困在“删除用户”功能上。我不明白如何获取列表中每个用户的id,并将其传递给将“分离”多对多关

  • 我的项目中基本上有用户和角色实体。 这是我的控制器课程 这是我的UserManager课程 当我请求http://localhost:8080/api/users时,我得到了这样的错误数据 我的错在哪里?提前感谢您的回答。