【问题标题】:Error in Spring data JPA Join - One to many associationSpring data JPA Join中的错误 - 一对多关联
【发布时间】:2017-10-07 06:03:34
【问题描述】:

我正在尝试使用 Spring Data JPA 实现一对多示例的示例。我是数据 JPA 的新手。我的模型是,1-Users.java

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

还有,Privilages.java

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

然后收到类似的错误,

出现意外错误(类型=内部服务器错误, 状态=500)。评估 SpringEL 表达式的异常:“user.pname” (舰队:50)

而且我也尝试过类似非原生查询,

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

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

【问题讨论】:

    标签: java spring-mvc spring-data-jpa model-associations


    【解决方案1】:

    用户可以拥有许多特权..您似乎不能期望一直只获得一个。

    坚持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>
    

    【讨论】:

    • 好的..我会试试的。谢谢您的答复。让我知道我将在哪里获得这些关联实施的这些 JPA 适当文档?您能否建议文档以了解这些所有概念(关联)。因为我刚开始spring,spring数据JPA和hibernate。可以给文档参考吗?
    • 我试过你的代码。但它也不起作用。现在我越来越喜欢“出现意外错误(类型=内部服务器错误,状态=500)。评估 SpringEL 表达式的异常:“user.privJoin”(fleethome:50)”。
    • 我给了你一个想法.. 不要一个字一个字地接受它。相应地调整解决方案
    猜你喜欢
    • 1970-01-01
    • 2018-04-14
    • 2019-10-01
    • 2021-08-08
    • 2017-08-19
    • 2018-03-15
    • 2016-07-01
    • 2019-03-27
    • 1970-01-01
    相关资源
    最近更新 更多