【发布时间】:2019-10-20 17:28:22
【问题描述】:
我一直在尝试使用 Spring Data JPA Projections。还使用@Value 注解来连接一些引用投影的一些属性。
当引用的投影之一返回“null”时会出现问题,因为该特定列在 DB 中为 null。有没有办法绕过这个问题?即,如果任何引用的投影为空,那么是否可以不使用该投影并仍然使用其他投影的值?
示例代码:
public interface InitialProjection{
String getName();
ReferencedProjection1 getRp1();
ReferencedProjection2 getRp2();
@Value("#{target.name + ' - ' + target.rp1.name + ' - ' + target.rp2.name}")
String getDetail();
}
public interface ReferencedProjection1 {
String getName();
}
public interface ReferencedProjection2 {
String getName();
}
另外,由于我不得不使用 @Query 注释方法,它似乎需要为每个映射实体指定 LEFT JOIN。它是必需的还是有办法不必指定所有别名?
示例代码:
@Query("SELECT entity.name AS name, "
+ "ljrp1 AS rp1, "
+ "ljrp2 AS rp2 "
+ "FROM Entity entity "
+ "LEFT JOIN entity.rp1 ljrp1 "
+ "LEFT JOIN entity.rp2 ljrp2 "
+ "WHERE entity.isDeleted = 0 ORDER BY entity.name ASC")
List<InitialProjection> fetchAllActiveEntities();
第一部分的解决方案:如已接受的答案中所述,可以使用 Spring 表达式语言检查映射的投影是否为空。它们将包含在下面给出的括号中。
@Value("#{target.name + ' - ' + (target.rp1 != null ? target.rp1.name : '' )+ ' - ' + (target.rp2 != null ? target.rp2.name : '')}")
【问题讨论】:
标签: java spring-data-jpa spring-projections