[英]'Could not extract ResultSet' error when using nativeQuery in JPA
[英]ResultSet error executing @Query in JPA Reposity, using nativeQuery = true
我正在使用以下网络应用程序:
我有一个名为role
的表和另一个page
。 其中有一个带有ID的many-to-many
表。 我想要得到的是与角色对应的页面列表,所以我试图从角色的id中检索页面列表并执行查询以获取列表。 问题是我在ResultSet
有一个错误,因为它告诉我它没有找到名为page_id
的列。
示例:我已单独执行查询,这正确地为我带来了结果。
select p.url from role_page rp, page p where rp.role_id = 6 and rp.page_id = p.page_id;
输出: 查询的输出
然后我调用了函数来获取列表并检查它以确保我得到结果。
public void rolesAndPages(){
List<Page> pages = pageRepository.findPagePerRole(6);
for (Page page: pages
) {
System.out.println(page.getUrl());
}
}
并抛出上述错误:
org.postgresql.util.PSQLException: The column name page_id was not found in this ResultSet.
我的存储库:
@Repository("pageRepository")
public interface PageRepository extends JpaRepository<Page, Long> {
@Query(value = "select p.url from role_page rp, page p where rp.role_id = ?1 and rp.page_id = p.page_id", nativeQuery = true)
List<Page> findPagePerRole(Integer id);
}
Role.java
@Entity
@Table(name = "app_role")
public class Role {
@Id
@SequenceGenerator(name="pk_sequence",sequenceName="messagesounds_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
@Column(name="role_id")
private int id;
@Column(name="authority")
@NotEmpty(message = "*Please provide a name")
private String authority;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "role_page", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "page_id"))
private Set<Page> pages;
public void setPages(Set<Page> pages) {
this.pages = pages;
}
public Set<Page> getPages() {
return pages;
}
public Role() {}
public Role(String authority) {
this.authority = authority;
}
public Role(String authority, Set<Page> pages){
this.authority = authority;
this.pages = pages;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAuthority() {
return authority;
}
public void setAuthority(String authority) {
this.authority = authority;
}
}
Page.java
@Entity
@Table(name = "page")
public class Page {
@Id
@SequenceGenerator(name = "pk_sequence", sequenceName = "messagesounds_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pk_sequence")
@Column(name = "page_id")
private int id;
@Column(name = "name_page")
@NotEmpty(message = "*Please provide a name")
private String name;
@Column(name = "url")
@NotEmpty(message = "*Please provide an url")
private String url;
@Column(name = "description")
@NotEmpty(message = "*Please provide a description")
private String description;
@ManyToMany(mappedBy = "pages")
private Set<Role> roles;
public Page() {
}
public Page(String name_page) {
this.name = name_page;
}
public Page(String name_page, Set<Role> roles) {
this.name = name_page;
this.roles = roles;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
你试过了吗:
@Query(value = "select p.url from role_page rp, page p where rp.id = ?1 and rp.id = p.id")
错误非常明显,您需要选择page_id列才能使其正常工作,而不仅仅是p.url
。
试试这个来检索Page的每一列:
@Query(value = "select p.* from role_page rp, page p where rp.role_id = ?1 and rp.page_id = p.page_id", nativeQuery = true)
或者,这将检索表Page和Role_Page的每一列:
@Query(value = "from role_page rp, page p where rp.role_id = ?1 and rp.page_id = p.page_id", nativeQuery = true)
两个查询都应该有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.