JPQL TypedQuery - setParamer 不起作用

问题描述

我正在尝试使用命名查询获取具有一对一关系的实体。我的“where”条件在关系实体上。我给出了一个命名参数。当我执行查询时,它忽略传递的参数并给我所有记录。 我试过位置参数,它也没有用。

查询

@NamedQuery(
   name = "country.by.region",query = " select c from Country c join Region r on r.id = :regid"
)

国家实体

public class Country {

    @Id
    @Column(name = "COUNTRY_ID")
    private String id;
    @Column(name = "COUNTRY_NAME")
    private String name;
    @OnetoOne(targetEntity = Region.class,cascade = CascadeType.ALL)
    @JoinColumn(name = "REGION_ID")
    private Region region;
    // ...
}

区域实体

public class Region {

    @Id
    @Column(name = "REGION_ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "regSeq")
    private int id;
    @Column(name = "REGION_NAME")
    private String name;
    // ...
}

DAO 实现

@Override
public List<Country> findBy(Region region) {
    TypedQuery<Country> query = getEntityManager().createNamedQuery("country.by.region",Country.class);
    query.setParameter("regid",region.getId());
    query.setMaxResults(30);
    return query.getResultList();
}

解决方法

尝试以这种方式更正您的查询:

select c from Country c join c.region r where r.id = :regid

另请参阅文档的 this section

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...