【问题标题】:JPQL Query Error - hibernate many to many relationshipJPQL 查询错误 - 休眠多对多关系
【发布时间】:2019-12-17 01:34:44
【问题描述】:

我想打印出所有的“Cuentas?”客户端名称为“Paco”: 我有这个实体:

public class Cuenta implements Serializable{

    private static final long serialVersionUID = 1L;    

    @ManyToMany(mappedBy = "cuentasC",fetch = FetchType.LAZY)
    private Set<Cliente> clientesC = new HashSet<Cliente>();
}

@Entity(name = "CLIENTE")
public class Cliente implements Serializable{

    @Column(name = "Nombre", length = 30, nullable = false)
    private String Nombre_C;

    @ManyToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
    private Set<Cuenta> cuentasC = new HashSet<Cuenta>();
}

我有这个查询得到这个错误:

String q = "select c FROM CUENTA c, IN (cuentas.clientesC) cli "+"WHERE CLIENTE cli.Nombre = 'Paco' ";
Query query = em.createQuery(q);
List<Cuenta> resultado = query.getResultList();
System.out.println(resultado.toString());

显示这个我找不到原因的错误:

unexpected token: cli near line 1, column 76 [select c FROM entidades.Cuenta c, IN (cuentas.clientesC) cli WHERE CLIENTE cli.Nombre = 'Paco' ]
unexpected token: cli near line 1, column 76 [select c FROM entidades.Cuenta c, IN (cuentas.clientesC) cli WHERE CLIENTE cli.Nombre = 'Paco' ]

可能是语法错误?关系的方向可能有问题吗?

【问题讨论】:

  • select c FROM entidades.Cuenta c, IN (cuentas.clientesC) cli WHERE CLIENTE cli.Nombre = 'Paco' 一旦你定义了cli。仅将其替换为 c,因为您将 c 定义为 entidades.Cuenta 的别名
  • 但是如果我把这个 ``` select c FROM entidades.Cuenta c, IN (cuentas.clientesC) cli WHERE CLIENTE c.Nombre = 'Paco' ``` 我没有字段叫“Nombre”
  • 因为您将字段称为Nombre_C。你不能这样混合 HQL 和 SQL
  • 好的。问题已解决,感谢帮助:D!

标签: java hibernate jpql


【解决方案1】:

已解决和升级: 选择所有 Saldo 大于 10 且 "CLIENTE.name" = 'Paco' 的“CUENTA”

String q = "select c FROM CUENTA c, IN (c.clientesC) clientesC "
                    +"WHERE clientesC.Nombre_C = 'Paco' AND c.Saldo > 10";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多