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

Spring数据jpa连接在@Query中不起作用

叶德本
2023-03-14

我使用的是spring-data-jpa。我写了一个本机查询,但它不起作用。这是我的实体类:

@Entity
@Table(name="view_version")
public class ViewVersionDom {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name="view_id")
private ViewDom view;

private Integer version;

@ManyToOne
@JoinColumn(name="datasource_param_id")
private DatasourceParamDom datasourceParam;

private String description;

@Column(name="created_date")
private Date createdDate;
@Entity
@Table(name="view_permission")
public class ViewPermissionDom extends BaseDom {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

@ManyToOne
@JoinColumn(name="view_id")
private ViewDom view;

@ManyToOne
@JoinColumn(name="user_id")
private UserDom user;

@ManyToOne
@JoinColumn(name="group_id")
private GroupDom group;

private Boolean read;

private Boolean write;

private Boolean execute;

以下是查询:

@Query(value = " SELECT v FROM ViewVersionDom v LEFT JOIN ViewPermissionDom vp ON v.view.id = vp.id " 
         + " where (v.view.user.id = ?1 OR (vp.read=true and (vp.user.id=?1 or vp.user.id is NULL and vp.group.id is NULL or vp.group.id in (?2)))) "
         + " ORDER BY v.view.name", nativeQuery=true)
public List<ViewVersionDom> findUserViews(Long userId, List<Long> groupIds);

起初,当我没有编写nativeQuery=true时,应用程序没有构建,我得到了一个异常“加入jpa的预期路径”。当我设置nativeQuery=true时,应用程序已启动,但当我调用该函数时,我收到以下错误:

org.hibernate.engine.jdbc.spi.SqlExceptionHelper - [ERROR: relation "viewversiondom" does not exist Position: 16] 
org.hibernate.exception.SQLGrammarException: could not extract ResultSet] 

是否有任何其他设置或注释可以解决此问题?我在谷歌上搜索过,但在所有情况下都有两个表直接相连。

共有1个答案

邓季
2023-03-14

您的查询不是SQL查询(假设您的表中没有列v)。

此外,用于连接的数据库用户不存在或无法访问表viewversiondom。

此外,在将本机查询映射到域对象时,您应该看看https://jira.spring.io/browse/DATAJPA-980

 类似资料:
  • 我试图通过使用Spring Data中的注释,将排序与集成在联接字段上。 有人建议将添加到参数中,以便在某种程度上与分页(spring data jpa@query和pagable)相对应 我已经学习了Baeldung的教程,但这不包括联接 Spring-Data FETCH JOIN与分页不起作用也建议使用,但我更喜欢使用,而不是. 我将在下面留下一些代码示例。如果我遗漏了一些重要的东西,请随时

  • 我在使用LEFT JOIN FETCH时遇到了一个问题。请参考我下面的实体和存储库。 考虑一个场景,可选的课程不会在任何时间点从表中删除。但是学生信息可以被删除。数据库中的两个表之间没有主键和外键关系。只是我们有一个共同的栏目“学生ID”。 不带事务的服务方法: 具有事务性的服务方法: 尽管我使用了LEFT JOIN FETCH,但当我调用依赖实体(即oc)时,为什么在学生记录不存在的情况下(即学

  • 我正在使用Springjpa和龙目岛来定义爪哇豆主题。每个主题都会有很多评论。我的一吨配置是 我创建的restful api是这样的。序列化似乎是问题所在,它总是获取注释。正如Chris所说,我添加了,它似乎解决了问题。但是如果我想加载注释怎么办,不会返回序列化中的注释。

  • 试图使用可分页的JOIN FETCH获取Post对象。但是它的抛出异常。 实体 存储库查询如下, 已经尝试过, 但这会导致以下例外。 但下面列出的返回类型工作得很好。为什么以及如何使用分页? 为什么列表按预期工作,但页面对象未按预期工作。是否缺少任何参数,或者是否需要稍微更改查询以适应可分页?

  • 问题内容: 我有实体 与实体有关 与实体有关 在实体中,我有用注释的字段。我也有仓库 当我称它为 例外时 如何忽略从数据库加载该字段? 问题答案: 我找到了解决方案,问题出在“注释”中,当我将其更改为正常时。

  • 我将hibernate-orm与spring-data-jpa一起使用。我有三个实体、、声明如下: 我的目标是获得A和获取b的列表,在实体C上有一些条件,而不获取它。以下JPQL工作正常。 当我尝试使用JPA规范时,我的规范如下所示: 我正在重用由fetch操作完成的隐式连接。此连接不符合规范。它输出以下JPQL。 也就是说,没有别名。 我研究了Hibernate GitHub的源代码。我发现,有