【发布时间】:2018-08-19 21:54:37
【问题描述】:
我一直以post 为例。 我有一个复杂的连接查询(这里简化)。它返回来自两个表的值的子集(以及使用 CASE 的派生列)。我认为我不需要使用实体注释,因为从我的结果集中返回的对象不是我架构中的实际表。
我想保存我的连接查询结果的非实体对象:
@SqlResultSetMapping(
name="myMapping",
classes={
@ConstructorResult(
targetClass=CarLimitDelta.class,
columns={
@ColumnResult(name="caseCol"),
@ColumnResult(name="colA"),
@ColumnResult(name="colB"),
}
)
}
)
@NamedNativeQuery(name="CarLimitDelta.getCarLimitDelta",
resultSetMapping="myMapping",
query="SELECT CASE "+
"WHEN t.foo IS NULL THEN 'INS' "+
"WHEN s.foo IS NULL THEN 'DEL' "+
"ELSE 'UPD' "+
"END caseCol "+
", T.bar colA "+
", S.bar ColB "+
"FROM tableA S "+
"FULL JOIN TableB ON S.bar= T.bar")
public class CarLimitDelta {
private String caseCol;
private String colA;
private String colB;
//getters/setters/etc
}
我的回购:
@Repository
public interface CarLimitRepository extends CrudRepository<CarLimitDelta, String> {
List<CarLimitDelta> getCarLimitDelta();
}
我的服务:
@Service
public class CarLimitService {
@Autowired
CarLimitRepository carLimitRepository ;
public void deleteAll() {
carLimitRepository.deleteAll();
}
public List<CarLimitDelta> getCarLimitDelta() {
return carLimitRepository.getCarLimitDelta();
}
}
我不确定如何让我的存储库查看我在 NamedNativeQuery 中定义的新 CarLimitDelta.getCarLimitDelta 本机查询方法。我收到以下错误:
派生查询无效!找不到类型的属性 getCarLimitDelta CarLimitDelta!
【问题讨论】:
-
我最终通过在我的数据库中创建一个视图并使用标准实体/存储库/服务结构而不是调用本机查询来解决这个问题。后面再看原生查询方案。
标签: java jpa spring-data-jpa named-query sqlresultsetmapping