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

JPA查询连接错误:org。冬眠hql。内部的阿斯特。QuerySyntaxException:应为join的路径

朱承载
2023-03-14

我试图加入以下JPA查询,但出现以下错误:

组织。冬眠hql。内部的阿斯特。QuerySyntaxException:预期加入的路径![from com.crm.entity.User-User-join-fetch-Role-on-Role.User_-id=User.id,其中User.deleted=false,User.enabled=true,User.username=:username]

以下是实现:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.transaction.Transactional;

import org.springframework.stereotype.Repository;

import com.crm.entity.User;

@Transactional
@Repository
public class UserJpaDaoImpl implements UserJpaDaoCustom {

    @PersistenceContext
    private EntityManager em;

    @Override
    public User getUser(String username) {
        Query query = em.createQuery("from User user "
                                    + "join fetch Role role on role.userId = user.id "
                                    + "where user.deleted = false "
                                    + "and user.enabled = true "
                                    + "and user.username = :username", User.class);
        query.setParameter("username", username);
        return (User)query.getSingleResult();
    }

}

用户实体:

@Entity
@Table(name = "user")
public class User extends BaseEntity implements UserDetails, Visible {

    private static final long serialVersionUID = 1L;

    @Column(name = "username")
    private String username;

    @Column(name = "password")
    private String password;

    /* Spring Security fields*/
    @OneToMany
    @JoinColumn(name = "user_id")
    private List<Role> roles;
...

角色实体:

@Entity
@Table(name = "role")
public class Role implements GrantedAuthority, Identifiable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    private Integer id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "user_id")
    private Integer userId;
...

我的查询中的连接有什么问题?

共有1个答案

钮承恩
2023-03-14

这是HQL不SQL:

   Query query = em.createQuery("from User user "
                                + "join fetch user.role "
                                + "where user.deleted = false "
                                + "and user.enabled = true "
                                + "and user.username = :username", User.class);

您必须处理对象结构,而不是表

 类似资料:
  • 在HQL中,我试图获取没有分类的工件(当活动为0时) 每当我跑步时,我都会出错 分类定义: 你可以参考我之前遇到的问题来理解我到底想做什么任务1和任务2

  • 在我的jax rs上使用hibernate时,出现以下错误: HTTP错误500 访问 /services/datesTest.问题原因: java.lang.连接器上的异常。Connector.buildSessionFactory(Connector.java:32)连接器。连接器处的Connector.getSessionFactory(Connector.java:37)。Connecto

  • 问题内容: 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我试图以多种方式构建有效的选择查询,但仍然无法正常工作。 实体有问题吗? 问题答案: 仅当实体之间存在关联时才能使用联接。您的Employee实体不应将名称为,类型为的字段映射到列。它应该与Team实体具有ManyToOne关联,并映射为J

  • 问题内容: 如何在Hibernate中编写此SQL查询?我想使用Hibernate创建查询,而不是创建数据库。 我在SQLServer2008中创建了实体类, 我试图以多种方式构建有效的选择查询,但仍然无法正常工作。 实体有问题吗? 问题答案: 连接只能在实体之间存在关联时使用。您的Employee实体不应将名称为,类型为的字段映射到列。它应该与Team实体具有ManyToOne关联,并映射为Jo

  • 我刚开始Hibernate,遇到了以下问题:我得到了“加入的路径!” 尝试运行此查询时出现异常: 我想选择给定航班已售出的机票的平均价格。 我已经检查了这些链接,但我没有解决我的问题:HQL左连接:连接预期的路径hql内部连接预期的路径!错误 我的代码是: 航班.hbm.xml 票据.hbm.xml 没有JOIN的所有其他查询都可以正常工作。我不知道问题出在哪里。 正确的问题是: 连同查询执行:

  • 问题内容: 我刚进入休眠状态,遇到了以下问题:我收到了 “希望加入的路径!” 当我尝试运行此查询时出现异常: 我的代码是: Flight.hbm.xml Ticket.hbm.xml 所有其他没有JOIN的查询都可以正常工作。我不知道问题出在哪里。 正确的查询是: 并与查询执行一起: 问题答案: 如您所链接的问题和Hibernate文档中所述,实体之间的连接使用关联。所以正确的查询是 还要注意,与