我没有努力建议一个spring data jpa存储库.目标是检测(围绕)void使用自定义注释(在此示例中为ResourceNotFound)注释的特定存储库中的所有非公共方法,并在返回值为null空集合时抛出异常.
@Repository
@ResourceNotFound
@Transactional(readOnly = true)
public interface CityRepository extends JpaRepository<City, Long>, JpaSpecificationExecutor<City> { … }
Run Code Online (Sandbox Code Playgroud)
以下建议是连接带注释的接口实现的所有公共方法@ResourceNotFound.
@Pointcut("within(com.digitalmisfits.spring.aop.annotation.ResourceNotFound *)")
public void beanAnnotatedWithResourceNotFound() {}
@Pointcut("execution(public * *(..))")
public void publicMethod() {}
@Around("beanAnnotatedWithResourceNotFound() && publicMethod()")
public Object publicMethodInsideAClassMarkedWithResourceNotFound(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("publicMethodInsideAClassMarkedWithResourceNotFound " + pjp.getTarget().toString());;
Object retVal = pjp.proceed();
if(((MethodSignature) pjp.getSignature()).getReturnType() != Void.TYPE && isObjectEmpty(retVal))
throw new RuntimeException("isObjectEmpty == true");
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
该publicMethodInsideAClassMarkedWithResourceNotFound(…)方法的工作原理,当切入点isspecified为:
@Pointcut("execution(public * package.CityRepository+.*(..))")
Run Code Online (Sandbox Code Playgroud)
但是,@ResourceNotFound注释没有被提取.这可能是由于存储库接口的基础类是(代理的)SimpleJpaRepository …
是否可以在intellij的远程服务器上部署/运行(用于测试目的)独立的Java应用程序?我不是要连接到已经在运行的JVM,而是要从intellij在远程主机上启动新的JVM,就像它在本地计算机上运行一样?
是否可以在JPA中指定自定义连接条件(jpql或通过条件api?
select .. from .. join ... on (... <custom criteria> )
Run Code Online (Sandbox Code Playgroud)
我需要这个的原因是因为我想在日期范围内加入一组表(一个是具有事实堆叠的历史表)
**更新**
可以在JPA(2.1>)中指定其他连接条件/条件.见接受的答案(zxcf).
Hibernate注意:虽然可以使用JOIN .. ON或使用javax.persistence.criteria.JOIN编程式指定其他连接条件,但是不能使用引用不同表的条件,只能引用同一个表的条件(和支持不高于层次结构)请参阅:https://hibernate.atlassian.net/browse/HHH-7321