所以我在下面有以下查询:
public Iterable<Dealer> findAll(Dealer dealer) {
QDealer qdealer = QDealer.dealer;
BooleanExpression where = null;
if(dealer.getId() != null && dealer.getId() != 0) {
buildPredicate(qdealer.id.goe(dealer.getId()));
}
OrderSpecifier<String> sortOrder = QDealer.dealer.dealerCode.desc();
Iterable<Dealer> results = dlrRpstry.findAll(where, sortOrder);
return results;
}
Run Code Online (Sandbox Code Playgroud)
上面的查询工作正常.但是,我想首先按dealerType对结果进行排序,然后由dealerCode对结果进行排序,有点像"由dealerType asc,dealerCode desc订购".如何实例化OrderSpecifier,以便结果将按dealerType排序,然后按经销商代码排序.
DealerRepository dlrRpstry扩展了JpaRepository,QueryDslPredicateExecutor
我使用的是spring-data-jpa-1.1.0,spring-data-commons-dist-1.3.2和querydsl-jpa-2.9.0.
如果OrderSpecifier不能配置为多列排序顺序,那么将满足我对"by dealerType asc,dealerCode desc"排序结果的要求的替代解决方案.
任何帮助将不胜感激.提前致谢.
缺口
在通过JPA,QueryDSL时,他们都包含了类型安全查询的概念.但究竟是什么呢?根据博客/文章,我想JPA/QueryDSL的一个功能是在进行查询时验证它们的参数类型.并且查询的任何错误都会在编译时而不是运行时出现.我对吗?它只是为了这个还是我错过了什么?
我在我的hibenrate实体类中有以下属性:
@MapKeyJoinColumn(name = "language_code")
@LazyCollection(LazyCollectionOption.EXTRA)
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "text_translations", joinColumns = @JoinColumn(name = "text_id"))
private Map<Language, String> translations = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
现在我想查询这个实体并按用户的语言过滤地图内容(即按地图的键).我有以下加入我的查询:
StringPath titleTran = new StringPath("title_tran");
from(entity).
.leftJoin(entity.translations, titleTran).fetch().where(?mapKey?.eq(userLanguage));
Run Code Online (Sandbox Code Playgroud)
我需要的是什么?mapKey?通过titleTran路径的语言路径.这在QueryDsl中是否可行?
我在我的项目中使用了 querydsl、hibernate 和 spring data jpa。我编写了这个本机查询并且工作正常。但是我如何在 Querydsl 中编写这个查询。
List<OpenChart> openChartList = (List<OpenChart>) getEntityManager()
.createNativeQuery( "select * from (select * from open_chart order by id desc ) open_chart where user_id="+userId+" group by patient_chart_id order by id",OpenChart.class).getResultList();
Run Code Online (Sandbox Code Playgroud) 是否有可能在spring-data存储库中有两个方法 - 一个没有锁定T findOne(Predicate p);在一起但有锁定@Lock(LockModeType.PESSIMISTIC_WRITE) T findOne(Predicate p);?
我希望有类似的东西
public interface TransactionRepository extends JpaRepository<Transaction, String>,
QueryDslPredicateExecutor<Transaction> {
@Lock(LockModeType.PESSIMISTIC_WRITE)
@AliasFor("findOne")
Transaction findOne_withLock(Predicate p);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Spring Boot项目中的gradle为我的Mongo实体生成QueryDSL Q类.我正在使用的IDE是Intellij.
我正在使用的代码改编自本主题从Gradle构建脚本生成JPA2 Metamodel:
sourceSets {
generated {
java {
srcDirs = ['src/generated/java']
}
}
}
configurations {
querydslapt
}
task generateQueryDSL(type: JavaCompile, group: 'build', description: 'Generates the QueryDSL query types') {
source = sourceSets.main.java
classpath = configurations.compile + configurations.querydslapt
options.compilerArgs = [
"-proc:only",
"-processor", "org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor"
]
destinationDir = sourceSets.generated.java.srcDirs.iterator().next()
}
compileJava {
dependsOn generateQueryDSL
source generateQueryDSL.destinationDir
}
compileGeneratedJava {
dependsOn generateQueryDSL
options.warnings = false
classpath += sourceSets.main.runtimeClasspath
}
clean {
delete sourceSets.generated.java.srcDirs
}
idea {
module …Run Code Online (Sandbox Code Playgroud) 我尝试在 Spring Boot 中将 Query DSL 与 MongoDB 结合使用,但出现错误。该应用程序无需使用 MongoDB 的 Query DSL 库即可成功运行。我想使用这个库,因为我想使用更复杂的查询。代码应该可以工作,我认为某处有一个小错误。
问题是当我单击 Maven 包时,我收到这些错误,不幸的是我无法在此处发布所有输出:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hotelController' defined in file [C:\Users\dgs\IdeaProjects\springboot-mongodb\target\classes\com\dgs\springbootmongodb\controller\HotelController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hotelRepository': Invocation of init method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.repository.support.QuerydslMongoPredicateExecutor]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Did not find a query class com.dgs.springbootmongodb.models.QHotel for domain class com.dgs.springbootmongodb.models.Hotel!
Caused by: org.springframework.beans.factory.BeanCreationException: Error …Run Code Online (Sandbox Code Playgroud) org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.loader.MultipleBagFetchException: 不能同时取多个包: [Order.items, OrderItem.options];
以上是我加入如下三个表时遇到的一个例外。
订单项选项.java
@Entity
public class OrderItemOption {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_option_id")
private Long id;
@Column(name = "item_id", nullable = false)
private Long itemId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(
name = "item_id",
referencedColumnName = "item_id",
insertable = false,
updatable = false
)
private OrderItem orderItem;
}
Run Code Online (Sandbox Code Playgroud)
订单项.java
@Entity
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id")
private Long id;
@Column(name = "order_id", nullable = false)
private Long orderId;
@ManyToOne(fetch = FetchType.LAZY) …Run Code Online (Sandbox Code Playgroud) 我有一个这样的实体层次结构。除了一些常见的属性外,一些属性仅由几个子类型共享:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {
private String firstName;
private String lastName
... further properties, getters and setters...
}
@Entity
public class Employee extends Person {
private String salary;
... further properties, getters and setters...
}
@Entity
public class BoardMember extends Person {
private String salary;
... further properties, getters and setters...
}
@Entity
public class ExternalMember extends Person {
private String clearanceLevel;
... further properties, getters and setters...
}
@Repository
public interface PersonRepository extends …Run Code Online (Sandbox Code Playgroud) 我正在尝试将ReactiveQuerydslPredicateExecutor和 R2dbcRepository 用于我的 spring-data-r2dbc 应用程序和 r2dbc-mssql 客户端版本 0.8.1.RELEASE
我将spring-boot版本从 2.2.7.RELEASE 升级到2.3.0.RELEASE并将spring-data-r2dbc版本从 1.0.0.RELEASE 升级到1.1.0.RELEASE。我正在使用 query-dsl 版本 4.3.1 来生成带有 apt-maven-plugin 的 Q-Classes。
进行这些更改后,当我运行我的应用程序时,出现以下错误。我一整天都在尝试,但找不到任何使它起作用的方法。有什么我想念的吗?
注意:如果我不进行上述更改并且不扩展存储库类中的 ReactiveQuerydslPredicateExecutor,则应用程序运行得非常好。
模型类
@Table(value = "db_access_schema.access_control")
@QueryEntity
public class AccessControl implements Persistable<UUID> {
@Id
private UUID id;
private Long iub;
private Long iubHeadOffice;
private String bncId;
private String subjectId;
private String subjectTypeCd;
private String subjectIdTypeCd;
private String objectId;
private String objectTypeCd;
private String objectIdTypeCd;
private String actionCd;
private …Run Code Online (Sandbox Code Playgroud) querydsl ×10
java ×6
hibernate ×5
spring ×3
spring-boot ×3
jpa ×2
mongodb ×2
sql ×2
dictionary ×1
gradle ×1