标签: jpql

将IN子句列表添加到JPA查询中

我已经构建了一个看起来像这样的NamedQuery:

@NamedQuery(name = "EventLog.viewDatesInclude",
        query = "SELECT el FROM EventLog el WHERE el.timeMark >= :dateFrom AND "
        + "el.timeMark <= :dateTo AND "
        + "el.name IN (:inclList)")
Run Code Online (Sandbox Code Playgroud)

我想要做的是填写参数:inclList与项目列表而不是一个项目.例如,如果我有一个new List<String>() { "a", "b", "c" }如何在:inclList参数中得到它?它只允许我编纂一个字符串.例如:

setParameter("inclList", "a") // works

setParameter("inclList", "a, b") // does not work

setParameter("inclList", "'a', 'b'") // does not work

setParameter("inclList", list) // throws an exception
Run Code Online (Sandbox Code Playgroud)

我知道我可以构建一个字符串并从中构建整个Query,但我想避免开销.有没有更好的方法呢?

相关问题:如果List非常大,有没有什么好的方法来构建这样的查询?

java jpa jpql

116
推荐指数
4
解决办法
23万
查看次数

JPQL IN子句:Java-Arrays(或Lists,Sets ...)?

我想将所有具有文本标记的对象加载到数据库中的任意一个小但任意数量的值中.在SQL中进行此操作的逻辑方法是构建"IN"子句.JPQL允许使用IN,但似乎需要我直接将每个参数指定给IN(例如,"in(:in1,:in2,:in3)").

有没有办法指定一个数组,或者应该展开到IN子句值的列表(或其他一些容器)?

sql orm jpa named-query jpql

101
推荐指数
1
解决办法
14万
查看次数

like子句JPQL中的参数

我正在尝试使用like子句编写JPQL查询:

LIKE '%:code%'
Run Code Online (Sandbox Code Playgroud)

我想有代码= 4并找到

455
554
646
...

我无法通过 :code = '%value%'

namedQuery.setParameter("%" + this.value + "%");
Run Code Online (Sandbox Code Playgroud)

因为在另一个地方我不需要:value%chars 包裹.有帮助吗?

java jpa eclipselink jpql sql-like

84
推荐指数
3
解决办法
11万
查看次数

HQL或Java持久性查询语言中的IN子句

我有以下参数化的JPA或Hibernate查询:

SELECT entity FROM Entity entity WHERE name IN (?)
Run Code Online (Sandbox Code Playgroud)

我想将参数作为ArrayList <String>传递,这可能吗?Hibernate电流告诉我,那

java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.String
Run Code Online (Sandbox Code Playgroud)

这有可能吗?

解答:作为参数的集合仅适用于像" :name" 这样的命名参数,而不适用于像" ?" 这样的JDBC样式参数.

java hibernate jpa hql jpql

75
推荐指数
3
解决办法
13万
查看次数

使用方法:JPQL或Criteria API?

我的Java应用程序使用JPA进行对象持久化.业务域非常简单(只有三个类是持久的,每个类有3-5个属性).查询也很简单.问题是我应该使用哪种方法:JPQL或Criteria API?

java jpa jpql criteria-api jpa-2.0

66
推荐指数
2
解决办法
2万
查看次数

JPQL在Select语句中创建新对象 - 避免或拥抱?

我最近了解到可以在JPQL语句中创建新对象,如下所示:

select new Family(mother, mate, offspr)
from DomesticCat as mother
    join mother.mate as mate
    left join mother.kittens as offspr
Run Code Online (Sandbox Code Playgroud)

这是要避免还是要拥抱?根据良好做法,何时使用此功能是合理的?

java orm hibernate jpa jpql

60
推荐指数
3
解决办法
6万
查看次数

限制JPQL中的结果数量

如何限制从数据库中检索的结果数量?

select e from Entity e /* I need only 10 results for instance */
Run Code Online (Sandbox Code Playgroud)

java jpa jpql

51
推荐指数
2
解决办法
5万
查看次数

Spring Data JPA和Exists查询

我正在使用Spring Data JPA(Hibernate作为我的JPA提供程序)并且想要定义exists附加了HQL查询的方法:

public interface MyEntityRepository extends CrudRepository<MyEntity, String> {

  @Query("select count(e) from MyEntity e where ...")
  public boolean existsIfBlaBla(@Param("id") String id);

}
Run Code Online (Sandbox Code Playgroud)

当我运行此查询时,我得到了一个java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Boolean.

HQL查询如何使其工作?我知道我可以简单地返回一个Long值,然后检查我的Java代码是否count > 0,但是这个解决方法不应该是必要的,对吧?

java hibernate jpa jpql spring-data

46
推荐指数
5
解决办法
9万
查看次数

IntelliJ IDEA在JPQL中使用"无法解析符号"突出显示@Entity类名

IntelliJ IDEA在JPQL中用红色的"无法解析符号"突出显示持久的@Entity类名,这会分散注意力并掩盖实际问题.

因此,例如,我在我的存储库中声明了一个查询:

private static final String READ_BY_CANDIDATE_KEY = "SELECT cr FROM Entity AS cr left join cr.relationship AS re left join fetch cr.relationship2 WHERE re.candidateKey=:ID";
Run Code Online (Sandbox Code Playgroud)

..和"实体"带有下划线,即使"实体"是有效的类名,并且具有@Entity注释.当代码实际运行时,没有问题.

我想要让IDE了解哪些类是有效的,需要某种配置?这个配置是如何完成的?

更新:我确实有一个JPA方面,但它没有看到带注释的类.它似乎需要一个persistence.xml或orm.xml(我的项目不使用)

annotations jpa intellij-idea jpql

42
推荐指数
2
解决办法
3万
查看次数

如何用嵌入式id编写JPQL SELECT?

我正在使用Toplink essentials(JPA)+ GlassFish v3 + NetBean 6.9

我有一个复合主键表:

table (machine)
----------------
|PK machineId  |
|PK workId     |
|              |
|______________|
Run Code Online (Sandbox Code Playgroud)

我为实体本身创建了两个实体类,第二个是PK类.

public class Machine {
   @EmbeddedId
   protected MachinePK machinePK;

   //getter setters of fields..
}

public class MachinePK {
    @Column(name = "machineId")
    private String machineId;

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

}
Run Code Online (Sandbox Code Playgroud)

现在.. 如何使用JPERE用WHERE编写SELECT子句?

这失败了.

SELECT m FROM Machine m WHERE m.machineId = 10
Run Code Online (Sandbox Code Playgroud)

http://www.mail-archive.com/users@openjpa.apache.org/msg03073.html

根据网页,添加"val"?不,它也失败了.

   SELECT m FROM Machine m WHERE m.machineId.val = 10
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,错误是:

    Exception Description: Error compiling the …
Run Code Online (Sandbox Code Playgroud)

java jpa composite-key jpql

41
推荐指数
2
解决办法
5万
查看次数