- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的要求是检索所有图像(WAHImage)对象,无论样本(SpecimenImpl)是否为空,分类单元名称(WACensusImpl)是否为空,并按样本名称或分类单元名称(如果可用)排序结果,并显示首先是具有空样本和空分类名称的图像对象。
使用下面的代码,我得到一个错误 No property coalesce(wAHimage found for type WAHImage
.
很明显,我的用例是 not (yet) fully supported in QueryDSL ,即查询实体并按其可为空的子对象的属性对结果对象进行排序的能力。这是因为 QueryDSL 使用 CROSS JOIN 而不是 LEFT JOIN,并且您不能使用 CROSS JOIN 按子对象属性排序。这似乎是我沮丧的根源,我现在正在寻找其他解决方案,而不是坚持使用 QueryDSL。
Spring Data JPA 存储库:
public interface ImageRepository extends JpaRepository<WAHImage, Long>,
QueryDslPredicateExecutor<WAHImage> {
Page<WAHImage> findAllByIsDeleted(boolean isDeleted, Pageable page);
}
@Service
public class ImageService {
private ImageRepository imageRepository;
public Page<WAHImage> get(Pageable pageable) {
return imageRepository.findAllByIsDeleted(false, ImagePredicates.orderByName(pageable));
}
static QPageRequest orderByName(Pageable page) {
QWAHImage image = QWAHImage.wAHImage;
QWACensusImpl name = image.census;
QSpecimenImpl specimen = image.specimen;
OrderSpecifier genus = name.name1.coalesce(specimen.genus).asc();
OrderSpecifier species = name.name2.coalesce(specimen.species).asc();
OrderSpecifier rank = name.rank4.coalesce(
name.rank3.coalesce(specimen.rank)).asc();
OrderSpecifier infraspecies = name.name4.coalesce(
name.name3.coalesce(specimen.infraspecies)).asc();
OrderSpecifier[] sort = new OrderSpecifier[] {
genus, species, rank, infraspecies
};
return new QPageRequest(page.getPageNumber(), page.getPageSize(), sort);
}
@Controller
public class ImageController {
@GetMapping("/list")
public String list(Pageable pageable, Model model) {
Page<WAHImage> searchResult = imageService.get(pageable);
}
}
org.springframework.data.mapping.PropertyReferenceException: No property coalesce(wAHImage found for type WAHImage!
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:77)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:309)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:243)
at org.springframework.data.jpa.repository.query.QueryUtils.toJpaOrder(QueryUtils.java:542)
at org.springframework.data.jpa.repository.query.QueryUtils.toOrders(QueryUtils.java:496)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.complete(JpaQueryCreator.java:195)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.complete(JpaQueryCreator.java:143)
at org.springframework.data.jpa.repository.query.JpaQueryCreator.complete(JpaQueryCreator.java:52)
at org.springframework.data.repository.query.parser.AbstractQueryCreator.createQuery(AbstractQueryCreator.java:88)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.createQuery(PartTreeJpaQuery.java:144)
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.doCreateQuery(PartTreeJpaQuery.java:79)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:190)
at org.springframework.data.jpa.repository.query.JpaQueryExecution$PagedExecution.doExecute(JpaQueryExecution.java:184)
at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:85)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:116)
at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:106)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:483)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:461)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
at com.sun.proxy.$Proxy143.findAllByIsDeleted(Unknown Source)
at x.y.z.image.ImageService.get(ImageService.java:120)
at x.y.z.image.ImageService$$FastClassBySpringCGLIB$$6d3a7999.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:652)
at x.y.z.image.ImageService$$EnhancerBySpringCGLIB$$21037cfe.get(<generated>)
at x.y.z.controller.image.ImageController.list(ImageController.java:132)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
@Entity
@Table(name = "image")
public class WAHImage extends PersistentImpl {
private WACensusImpl census = new WACensusImpl();
private SpecimenImpl specimen = new SpecimenImpl();
private boolean isDeleted = Boolean.FALSE;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "census_id", nullable = true)
public WACensusImpl getCensus() {
return census;
}
public void setCensus(WACensusImpl census) {
this.census = census;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "specimen_id", nullable = true)
public SpecimenImpl getSpecimen() {
return specimen;
}
public void setSpecimen(SpecimenImpl specimen) {
this.specimen = specimen;
}
@Column(name = "is_deleted")
public boolean getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(boolean isDeleted) {
this.isDeleted = isDeleted;
}
}
/**
* QWAHImage is a Querydsl query type for WAHImage
*/
@Generated("com.querydsl.codegen.EntitySerializer")
public class QWAHImage extends EntityPathBase<WAHImage> {
public static final QWAHImage wAHImage = new QWAHImage("wAHImage");
public final x.y.z.db.impl.QPersistentImpl _super = new x.y.z.db.impl.QPersistentImpl(this);
public final x.y.z.reference.census.impl.QWACensusImpl census;
//inherited
public final NumberPath<Long> id = _super.id;
public final BooleanPath isDeleted = createBoolean("isDeleted");
public final x.y.z.reference.specimen.impl.QSpecimenImpl specimen;
}
/**
* QWACensusImpl is a Querydsl query type for WACensusImpl
*/
@Generated("com.querydsl.codegen.EntitySerializer")
public class QWACensusImpl extends EntityPathBase<WACensusImpl> {
public static final QWACensusImpl wACensusImpl = new QWACensusImpl("wACensusImpl");
public final x.y.z.db.impl.QPersistentWithIDImpl _super = new x.y.z.db.impl.QPersistentWithIDImpl(this);
//inherited
public final NumberPath<Long> id = _super.id;
public final StringPath name1 = createString("name1");
public final StringPath name2 = createString("name2");
public final StringPath name3 = createString("name3");
public final StringPath name4 = createString("name4");
// extraneous parts omitted.
}
最佳答案
经过一些广泛的背景研究,我的用例似乎有 a long history并且仍然是 common one .
为了解决这个问题,我可以 (a) get access to the EntityManager在 Spring Data JPA并从那里使用 LEFT JOIN
s 构建查询,之后我应该可以使用 COALESCE
ImagePredicates.orderByName(Pageable)
中的关键字.
或者,(以及我决定使用的方法)我在 ImageRepository.findAllByIsDeleted(boolean, Pageable)
上使用 Spring Data @Query :
public interface ImageRepository extends JpaRepository<WAHImage, Long>,
QueryDslPredicateExecutor<WAHImage> {
@Query("select i from WAHImage i " +
"left join i.specimen s " +
"left join i.census c " +
"left join i.author a " +
"left join i.copyright co " +
"left join i.allowedUse au " +
"where i.isDeleted = ?1 " +
"order by coalesce(s.genus, c.name1) asc, " +
"coalesce(s.species, c.name2) asc, " +
"coalesce(s.infraspecies, c.name4, c.name3) asc")
Page<WAHImage> findAllByIsDeleted(boolean isDeleted, Pageable page);
}
关于spring - 按 QueryDSL 中可为空的子对象的属性对模型对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42546359/
我有这个 html 代码: HELLO WORLD! X V HELLO WORLD! X V 我想按 X(类关闭)将父 div 的高度更改为 20px 并显示 V(类打开),但在每个 d
在会计应用程序的许多不同实现中,有两种主要的数据库设计方法来保存日志和分类帐数据。 只保留 Journal 信息,然后 Ledger 只是 Journal 的一个 View (因为 journal 总
我想在另一个子里面有一个子, sub a { sub b { } } 我想为每次调用 sub b 创建一个新的 sub a 实例。有没有办法在 Perl 中做到这一点? 当我运行上面的
我有一些代码正在查找重复项并突出显示单元格: Private Sub cmdDups_Click() Dim Rng As Range Dim cel As Range Set Rng = ThisW
可能有一个简单的解决方案,但我很难过。 我有一个包含一个 ID 字段的主表。在两个可能的字段中有一个具有该 ID 的子表。想象一个由选手 A 和选手 B 组成的 double 队。Master 表将有
假设我有一个包含对象的数组: [ { "id": "5a97e047f826a0111b754beb", "name": "Hogwarts", "parentId": "
我正在尝试对 MySQL 数据库表执行一对父/子模型的批量插入,但似乎无法使用标准的 ActiveRecord 功能来完成。所以,我尝试了 activerecord-import gem,但它也不支持
我有一个带有多个子类的父抽象类。最终,我希望通过 GUI 中的进度条显示子类中完成的进度。 我目前所做的,我意识到这是行不通的,是在父类中声明为每个子类将覆盖的虚拟方法的事件方法定义。所以像: pub
是否可以通过键数组在对象中设置变量?例如我有这个对象: var obj = {'outer': {'inner': 'value'} }; 并希望设置由键数组选择的值: var keys = ['ou
我有一个名为 companies 的 MySQL 表,如下所示: +---------+-----------+-----------+ | id_comp | comp_name | id_pare
我正在尝试使用 sublime text 在 sublime text 上的 ionic 上打开我的第一个应用程序。它给了我一个“找不到命令”的错误。如何修复? 我试过这些命令: sudo rm -r
不好意思问,但我正在使用 webapp2,我正在设计一个解决方案,以便更容易定义路由 based on this google webapp2 route function .但这完全取决于能够在子级
我有代表树的数字字符串(我不知道是否有官方名称): 012323301212 上面的例子代表了 2 棵树。根用 0 表示。根的直接子代为“1”,“1”的直接子代为“2”,依此类推。我需要将它们分组到由
是否可以在当前 Activity 之上添加 Activity 。例如,假设我单击一个按钮,然后它将第二个 Activity 添加到当前 Activity 。而第二个 Activity 只覆盖了我当前
我很难思考如何为子资源建模。 以作者的书籍为例。你可以有 N 本书,每本书只有一位作者。 /books GET /books POST /books/id PUT /books/id DELETE 到
有人可以向我解释以下内容(python 2.7) 来自已解析文件的两个字符串数字: '410.9''410.9 '(注意尾随空格) A_LIST = ['410.9 '] '410.9' in '41
背景 在 PowerShell 中构建 hash table 是很常见的通过特定属性快速访问对象,例如以 LastName 为基础建立索引: $List = ConvertFrom-Csv @' I
我真的很难弄清楚如何调用嵌套 Polymer Web 组件的函数。 这是标记: rise-distribution组件有 canPlay我想从 rise-playlist
我写了一个小工具转储(以 dot 格式)一个项目的依赖关系图,其中所有位于同一目录中的文件都聚集在一个集群中。当我尝试生成包含相应图形的 pdf 时,dot开始哭: 命令 dot -Tpdf trim
给定一个 CODE ref,是否可以: 访问该 CODE ref 的解析树 通过指定 CODE ref 的解析树来创建一个新的 CODE ref,该解析树可以包含在 1 中返回的解析树的元素 通常我们
我是一名优秀的程序员,十分优秀!