标签: query-by-example

使用“OR”的 Spring 查询示例

我有一个 JPA 实体,它有两个属性可以通过“OR”运算符而不是“AND”进行搜索。这些是 ledgerCode 和 Division:

Company comp = new Company();
ExampleMatcher matcher =
    ExampleMatcher.matching().withStringMatcher(StringMatcher.CONTAINING)
        .withIgnoreCase("name");

comp.setCountryCode(countryCode);
comp.setLedgerCode(ledgerCode);
comp.setDivision(division);
comp.setName(name);

List<Company> result = compSearchRepository.findAll(Example.of(comp, matcher));
Run Code Online (Sandbox Code Playgroud)

那么SQL结果应该是(假设所有参数不为空):

SELECT d 
  FROM COMPANY d 
 WHERE d.countryCode = country 
    OR d.ledgerCode = ledger 
    OR d.division = division 
   AND lower(d.name) LIKE '%name%'
Run Code Online (Sandbox Code Playgroud)

是否可以?如果是的话,怎么会这样呢?我在 Google 上找不到任何代码示例,也找不到 ExampleMatcher 类中的建议方法名称。

java spring query-by-example spring-data-jpa

5
推荐指数
1
解决办法
4502
查看次数

HibernateTemplate findByExample不返回任何结果

我正在尝试使用Hibernate QBE(实际上是Spring的HibernateTemplate.findByExample())来返回用户名列表.我使用"已知良好"值进行搜索(用户名"JOHN.SMITH"确实存在于数据库中).

不幸的是,我没有得到任何结果.以下是单元测试.

@Test
public void testQueryByExample() {

    User qbeUser = new User();
    qbeUser.setUsername("JOHN.SMITH");

    List<User> userList = userDao.queryByExample(qbeUser);
    Assert.notNull(userList);
    Assert.isTrue(userList.size() > 0, "List of returned users must not be 0");

}
Run Code Online (Sandbox Code Playgroud)

queryByExample()方法在通用DAO中定义:

@SuppressWarnings("unchecked")
public List<T> queryByExample(T obj) {
    return getHibernateTemplate().findByExample(obj);
}
Run Code Online (Sandbox Code Playgroud)

QBE是否需要任何特殊配置才能工作?

java orm spring hibernate query-by-example

4
推荐指数
1
解决办法
5812
查看次数

Hibernate:Query By Example等效于关联Criteria Query

我想根据关联相关对象的值搜索我的数据源中的所有对象实例.数据模型可以简化为:类型A的对象包含类型B的对象列表.目标是查找A的所有实例,其中A包含B,使得B具有属性值X.

我已经可以使用Criteria查询成功实现此目的,如下所示:

  List<A> results = session.createCriteria(A.class)
    .createCriteria("listOfBs")
    .add(Restrictions.eq("propertyInB", x))
    .list();
Run Code Online (Sandbox Code Playgroud)

这是一种简化,B的多个属性将适用 - 搜索功能对于用户填充的过滤器是必需的.

我想通过示例查询替换这种方法 - 我只是创建一个具有所需参数的对象图.我在遵循Hibernate文档时的尝试失败了,并在此问题中进行了描述.

我认为以一种有效的方式展示我想要实现的东西,然后寻找等价物可能会有所帮助 - 这就是我重新提出这个问题的原因.

简而言之,我的问题是:如何在Hibernate中将上述Criteria Query实现为Query by Example?我正在使用Hibernate 3.6.6.

谢谢!

java hibernate query-by-example hibernate-criteria

4
推荐指数
1
解决办法
5502
查看次数

蜂巢侧视图,带有带有1列作为阵列的蜂巢表的示例示例

我的用例是我在配置单元中有一张表,其中一列为INT,另一列为Array数据类型。我想水平显示它。

hive sample view query-by-example lateral

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

Spring queryByExample 与范围之间

我有一个带有存储库的 Spring 应用程序

interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> { }

Event e = new Event();
e.setTest('ABC');

eventRepository.findAll(Example.of(e), pageable);
Run Code Online (Sandbox Code Playgroud)

工作得很好,我快到了。但我需要限制在“从”和“到”之间的日期范围内

我看到一些帖子说它不适用于 QBE,但这是在 2015 年。

我创建了一个 Range 对象,但我不知道如何应用它。

http://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/Range.html

我不能使用默认的弹簧方式

@Transactional
interface EventRepository extends JpaRepository<Event, Long>, QueryByExampleExecutor<Event> {

    def findBetween(Date lower, Date upper)

}
Run Code Online (Sandbox Code Playgroud)

因为我有一堆动态搜索参数。

spring between query-by-example

4
推荐指数
1
解决办法
2714
查看次数

如何在带有 python 类的 kivy 中使用下拉小部件

所以,我认为至少应该有两种方法可以在此页面上显示下拉菜单,但我无法使用这两种方法。我是 kivy 和编程的新手,但我已经阅读了文档,似乎我根本不明白。

我创建了以下示例:

import kivy
kivy.require('1.7.2') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown

class CustomDropDown(DropDown):
    pass

class HomeScreen(Screen):
    translateInput = ObjectProperty(None)
    translateButton = ObjectProperty(None)
    translateLabel = ObjectProperty(None)
    top_layout = ObjectProperty(None)
    dd_btn = ObjectProperty(None)
    drop_down = CustomDropDown()
    #notes_dropdown = ObjectProperty(None)


    dropdown = DropDown()
    notes = ['Features', 'Suggestions', 'Abreviations', 'Miscellaneous']
    for note in notes:
        # when adding widgets, we …
Run Code Online (Sandbox Code Playgroud)

python class query-by-example kivy drop-down-menu

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

拦截 Spring Data 中的存储库方法调用,动态优化查询

假设我有一些扩展的接口CRUDRepositor。里面有类似的方法findByField。其中一些方法应该只返回属于用户有权访问的一组实体的实体(这group是数据库中的列,因此它是为大多数实体定义的字段)。我想通过允许在存储库方法上使用注释(如@Protected)来实现这一点,然后当调用这些方法而不是调用幕后调用的findByField方法时。findByFieldAndGroup通过使用 AOP(它拦截用我的 @Protected 标记注释的方法),可以在有效执行方法之前分配组。

public interface MyRepository extends CRUDRepository<MyEntity,long> {

    @Protected
    Optional<MyEntity> findById(Long id); // Should become findByIdAndGroup(Long id, String group) behind the scenes

    @Protected
    Collection<MyEntity> findAll();

}
Run Code Online (Sandbox Code Playgroud)

有办法实现这一点吗?在最坏的情况下,我要么手动添加所有方法,要么完全切换到示例查询方法(您可以更轻松地动态添加组),或者使用 ASM(操作字节码)通过 Java 代理生成方法...但是这些都是不太实用的方法,需要大量的重构。

编辑:找到这些相关问题Spring data jpa - 在执行之前修改查询 Spring Data JPA and spring-security:在数据库级别进行过滤(尤其是分页) 其他相关参考文献包括GitHub 上的此票证(没有进展,只是一种解决方案)使用 QueryDSL,它阻止使用基于方法名称的查询)和此线程

java spring query-by-example spring-data

1
推荐指数
1
解决办法
2671
查看次数