Tag: querydsl

无法从另一个maven子项目调用Hibernate / QueryDSL

我有两个maven子项目 – jetty_runner1和jetty_runner2 我的目录结构如下所示: ./jetty_runner1/pom.xml ./jetty_runner1/src/main/java/com/jetty_runner1/CheckPersistence.java ./jetty_runner1/src/main/java/com/jetty_runner1/HelloWorldServlet.java ./jetty_runner1/src/main/java/com/jetty_runner1/MiscKeyValue.java ./jetty_runner1/src/main/java/com/jetty_runner1/MiscKeyValueManager.java ./jetty_runner1/src/main/resources/META-INF/persistence.xml ./jetty_runner1/src/main/webapp/WEB-INF/web.xml ./jetty_runner2/pom.xml ./jetty_runner2/src/main/java/com/jetty_runner2/CheckPersistence.java ./jetty_runner2/src/main/java/com/jetty_runner2/HelloWorldServlet.java ./jetty_runner2/src/main/resources/META-INF/persistence.xml ./jetty_runner2/src/main/webapp/WEB-INF/web.xml ./pom.xml CheckPersistence.java,HelloWorldServlet.java,persistence.xml和web.xml在两个项目中是完全相同的,除了包名(我已经创建了这个简化的例子,在这里发布。在实际应用中,这两个子项目做完全不同的东西) 以下是实际的文件内容: CheckPersistence.java public class CheckPersistence { public void beginUpdation() { String val = null; List keyValues = MiscKeyValueManager.get().selectStar(); if (keyValues != null && keyValues.size() == 1) val = keyValues.get(0).getStringValue(); if (val == null) val = “Hello World”; […]

在querydsl中调用mysql嵌套/内部函数

我需要在QueryDsl Native MySQL中运行以下查询。 SELECT cast(json_unquote(JSON_EXTRACT(vendor_master,’$.vendor.currency’)) as char) as currency FROM vendor; 上面的查询有3个嵌套的mysql函数,如cast,json_unquote和json_extract。 在QueryDsl中,我为每个函数创建了单独的Expression,如下面的代码所示。 SimpleExpression exp1=Expressions.simpleTemplate(String.class,”json_extract({0},{1})”,vendor.vendorMaster,”$.vendor.currency”); SimpleExpression exp2=Expressions.simpleTemplate(String.class,”json_unquote({0})”,exp2); SimpleExpression exp3=Expressions.simpleTemplate(String.class,”cast({0} as char) as currency”,exp3); List tuples=sqlQueryFactory.select(exp3).from(vendor).fetch(); 我必须创建更多数量的表达式,而不是函数。 是否可以在单个表达式中调用多个函数以降低复杂性?

自定义存储库基类+ QueryDslPredicateExecutor

我发现QueryDslPredicateExecutor对于减少样板非常有用,但它似乎正在投入一个猴子扳手。 我现在正在尝试使用自定义基类存储库扩展JpaRepository ,并且在启动时,Spring无法正确实例化存储库。 //Custom base class @NoRepositoryBean public interface IdAwareRepository extends JpaRepository { // ID getId(A a); } // Base class implementation public class IdAwareRepositoryImpl extends SimpleJpaRepository implements IdAwareRepository { public IdAwareRepositoryImpl(JpaEntityInformation entityInformation, EntityManager entityManager) { super(entityInformation, entityManager); } } // Individual repo @Repository public interface MyPojoRepository extends JpaRepository, QueryDslPredicateExecutor { } // Spring boot […]

如何使用querydsl调用mysql函数?

我很匆忙,所以我只想问一个关于querydsl的快速问题。 根据我的研究,查询dsl不支持存储过程,但可以支持数据库function。 我的问题是如何使用querydsl调用这些数据库函数?

调用init方法失败; 嵌套exception是java.lang.IllegalArgumentException:对于方法public abstract的查询,validation失败

我正在开发Spring MVC + Spring-data-jpa + querydsl ,我是新手。 当我为querydsl编写代码时(在该代码工作正常之前),当我添加querydsl相关代码时,我开始收到以下错误,不知道出了什么问题。 请指导。 参考错误: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘visitRepository’: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.journaldev.spring.repository.VisitRepository.findByVisitType()! at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) at […]

Spring Data JPA和QueryDSL

我是Spring数据JPA的新手,我正在尝试了解如何最好地使用它与QueryDSL。 没有QueryDSL,我可以使用@Query注释在SpringData接口中创建任何查询。 为了使用QueryDSL获得相同的体验,从我所看到的,我需要创建自己的自定义存储库实现并让我的repo接口扩展我的自定义实现接口或将我的所有QueryDSL查询放在包装我的repo的服务层。 在第一种情况下,我失去了在我的自定义仓库中使用任何SD自动生成方法(例如:findAll(QueryDSL谓词))的能力,因为我无法访问实际的仓库对象,在第二种情况下,我是将查询逻辑放在服务层而不是repo层。 这两种解决方案听起来都不是特别有吸引 有没有第三种方式更合适? 或者我误解了如何正确使用QueryDSL和Spring Data? 谢谢! 埃里克

处理QueryDSL中的可选参数

我在SpringData中使用QueryDSL。 我有Table说, Employee和我创建了实体类说, EmployeeEntity我写了以下服务方法 public EmployeeEntity getEmployees(String firstName, String lastName) { QEmployeeEntity employee = QEmployeeEntity.employeeEntity; BooleanExpression query = null; if(firstName != null) { query = employee.firstName.eq(firstName); } if(lastName != null) { query = query.and(employee.lastName.eq(lastName)); // NPException if firstName is null as query will be NULL } return empployeeDAO.findAll(query); } 如上所述,我评论了NPException 。 如何使用Spring数据在QueryDSL中使用QueryDSL作为可选参数? 谢谢 :)

QueryDsl – 集合表达式中的子查询

我正在使用spring-data-jpa和querydsl(3.2.3) 我有一个场景,我正在创建基于用户文件管理器/输入的谓词集。 所有这些都来自BooleanExpression 。 我的简化模型如下: @Entity public class Invoice { @ManyToOne private Supplier supplier; } @Entity public class Supplier { private String number; } @Entity public class Company { private String number; private boolean active } 现在,我正在努力解决的是这个问题: SELECT * FROM Invoice WHERE invoice.supplier.number in (SELECT number from Company where active=true) 所以基本上我需要在CollectionExpression使用子查询格式来获取所有公司的数字并将其设置为in()表达式。 我的spring-data存储库实现了CustomQueryDslJpaRepository ,后者又扩展了JpaRepository和QueryDslPredicateExecutor 。 我希望答案是直截了当的,但我对querydsl很新,到目前为止还没有找到解决方案。

左边连接spring数据jpa和querydsl

我正在使用spring数据jpa和querydsl并且如何编写简单的好查询以便左连接两个表。 假设我有一个Project实体和一个在Project中定义了OneToMany关系的Task实体,我想做类似的事情: select * from project p left join task t on p.id = t.project_id where p.id = searchTerm select * from project p left join task t on p.id = t.project_id where t.taskname = searchTerm 在JPQL中,它应该是: select distinct p from Project p left join p.tasks t where t.projectID = searthTerm select distinct p from […]

如何从querydsl获得完全具体化的查询

我正在尝试使用querydsl为动态模式构建动态查询。 我试图获得只是查询而不必实际执行它。 到目前为止,我遇到了两个问题: – schema.table符号不存在。 相反,我只获得表名。 – 我已经能够得到查询但是它将变量分开并放入’?’ 相反,这是可以理解的。 但我想知道是否有某种方法可以获得完全具体化的查询,包括参数。 这是我当前的尝试和结果(我使用MySQLTemplates来创建配置): private SQLTemplates templates = new MySQLTemplates(); private Configuration configuration = new Configuration(templates); String table = “sometable” Path userPath = new PathImpl(Object.class, table); StringPath usernamePath = Expressions.stringPath(userPath, “username”); NumberPath idPath = Expressions.numberPath(Long.class, userPath, “id”); SQLQuery sqlQuery = new SQLQuery(connection, configuration) .from(userPath).where(idPath.eq(1l)).limit(10); String query = sqlQuery.getSQL(usernamePath).getSQL(); […]