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

带有实体 java 的Hibernate查询语法异常 hql 错误

虞安康
2023-03-14

我有一个查询,其中连接了两个实体java(表)Command和User。我用左连接创建sql-hql查询,得到一个org.hibernate.hql.ast。QuerySyntaxException:意外的标记错误,我认为我的左连接语法和第二个选择有问题。我的实体

@Entity 
@Table(name = "Users")
public class User {

private int idUser;

private String login;

private String password;

private List<Command> commands = new ArrayList<>();


public User() { }

public User( String login, String password ) {
    super();
    this.setLogin( login );
    this.setPassword( password );
}

@Id
@Column(name = "USER_ID", unique = true, nullable = false, scale = 0)
public int getIdUser() {
    return idUser;
}

@Column(name = "USER_LOGIN", nullable = false)
public String getLogin() {
    return login;
}

public void setLogin(String login) {
    this.login = login;
}

@Column(name = "USER_PASSWORD", nullable = false)
public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}


@OneToMany(fetch = FetchType.LAZY, mappedBy = "utilisateur")
public List<Command> getCommands() {
    return commands;
}

public String toString() {
    return this.idUser + ": " + this.login + "/" + this.password 
         ;
}

}

@Entity  
@Table(name="Commands")
public class Command {


private int idCommand;

private User utilisateur;

private Date commandDate;


public Command() {}

public Command( User user, Date commandDate ) {
    this.setUser( user );
    this.setCommandDate( commandDate );
}

@Id
@Column(name = "CMD_Id", unique = true, nullable = false, scale = 0)
public int getIdCommand() {
    return idCommand;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")
public User getUtilisateur() {
    return user;
}

public void setUtilisateur(User user) {
    this.user = user;
}

@Column(name = "CMD_DATE")
@Temporal(TemporalType.TIMESTAMP)
public Date getCommandDate() {
    return commandDate;
}

public void setCommandDate(Date commandDate) {
    this.commandDate = commandDate;
}

public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append( "Commande de >> " ).append( this.user )
           .append( " - " ).append( this.commandDate ).append( "\n" );
    return builder.toString();
}   

}

我的hql查询

select us.login,us.password 
from User us  left join Command cmd on us.idUser = cmd.utilisateur.idUser
AND us.idUser not in (SELECT utilisateur.idUser from Command )   
ORDER BY us.idUser desc

我不知道我的hql查询有什么问题。我在 hql 查询中使用实体 Java。任何人都可以告诉我如何用良好的语法hql正确编写我的hql查询。

共有1个答案

颛孙凯定
2023-03-14

如果您需要没有命令的用户的用户登录名和密码,以下可能会有所帮助

select us.login,us.password 
from User us 
where us.idUser not in (select c.user.idUser from Command c)   
order by us.idUser desc
 类似资料:
  • 问题内容: 有没有一种方法可以像我向它们添加(NOLOCK)提示一样运行这些查询? 问题答案: 如果您确实需要此功能,则可以执行以下操作: 这与nolock相同。 在执行此操作之前,请认真思考是否要进行脏读。人们大多数时候这样做是因为这是他们一直以来所做的事情,而不是因为这是正确的事情。特别是,这不适用于缓存。 实际上,该线程会涉及一些问题。在决定之前,请仔细阅读。

  • 1. 前言 本节课程和大家一起学习 Hibernate 中的 HQL ( Hibernate 查询语言)。通过本节课程的学习,你将了解到: HQL 基础语法; HQL 查询的具体实现。- 2. HQL 查询?前面不是讲过?用过吗? 但是,前面的查询都是简单查询,真实项目中的查询需求要远比这个复杂。仅仅依靠 get()、load() 是远远达不到要求。 Hibernate 提供了灵活多样的查询机制,

  • 我有一个查询,其中我正在连接两个表ROuteMaster和routeHalts。当我执行内部连接时,我会得到 我在网站上搜索,发现了类似的问题和对它的回应。所提到的问题是 我在RouteHalts中为RouteMaster定义了多对一映射,我在RouteHalts中为RouteMaster定义了getter和setter方法 但仍然得到相同的错误。能请一个人给我指路吗。 映射文件 公共类Route

  • Hibernate 配备了一种非常强大的查询语言,这种语言看上去很像 SQL。但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态和关联之类的概念。

  • 问题内容: 我有一个查询,我正在联接两个表ROuteMaster和RouteHalts。当我执行内部联接时 我搜索了该网站,发现了类似的问题及其答案。提到的问题是 我在RouteHalts中为RouteMaster进行了多对一映射,在RouteHalts中为RouteMaster定义了getter和setter方法 但仍然出现相同的错误。可以请一个人来指导我。 映射文件 公共类RouteMaste

  • 本文向大家介绍Hibernate hql查询代码实例,包括了Hibernate hql查询代码实例的使用技巧和注意事项,需要的朋友参考一下 本文研究的主要是Hibernate hql查询的相关内容,具体如下。 HQL介绍 Hibernate语言查询(Hibernate Query Language,HQL)它是完全面向对象的查询语句,查询功能非常强大;具备多态、关联等特性,HQL查询也是Hiber