【发布时间】: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