DAO에 유용한 인터페이스 추가
DAO에는 다음과 같은 인터페이스가 있습니다.
/**
* , .
*/
public List<T> findBy(final String propertyName, final Object value) {
assert StringUtils.isNotBlank(propertyName);
String jpql = "from " + getEntityClass().getName() + " t where t." + propertyName + "=?";
return find(jpql, value);
}
만약 사용자 상태가 열린 사용자 목록을 찾으려면 이 방법을 사용합니다.
새로운 수요
오늘은 역할과 권한이 일방적으로 관련된다고 가정하고 권한 A를 가진 모든 역할을 찾아야 한다.
이전 솔루션
이전에 우리는 이 기능을 실현하려면 일반적으로 RoleDao에 listByPermissionName과 같은 방법을 써야 했다. 이를 실현하려면 JPQL을 통해 해결할 수 있다.
/**
* .
*/
public List<User> listByPermissionName(final String permissionName) {
// , join , select , Role 。
String jpql = "select distinct r from " + Role.class.getName() + " r left join r.permissions p where p.name=?";
return super.find(jpql, permissionName);
}
편리한 솔루션
현재 우리는 이런 유사한 수요에 많이 부딪혔기 때문에 부류 방법으로 이 문제를 해결할 수 있을까요?그래서 이 두 인터페이스가 생겼다.
/**
* , .
*
* @param propertyName
* @param nestedPropertyName
* @param value
*/
public List<T> findBy(final String propertyName, final String nestedPropertyName, final Object value) {
assert StringUtils.isNotBlank(propertyName);
assert StringUtils.isNotBlank(nestedPropertyName);
String jpql = "select distinct t from " + getEntityClass().getName() + " t left join t." + propertyName
+ " p where p." + nestedPropertyName + "=?";
return find(jpql, value);
}
/**
* , .
*
* @param propertyName
* @param nestedPropertyName
* @param value
*/
public T findUniqueBy(final String propertyName, final String nestedPropertyName, final Object value) {
assert StringUtils.isNotBlank(propertyName);
assert StringUtils.isNotBlank(nestedPropertyName);
String jpql = "select distinct t from " + getEntityClass().getName() + " t left join t." + propertyName
+ " p where p." + nestedPropertyName + "=?";
return findUnique(jpql, value);
}
이제 Role Manager에서 IdEntityDao의 이 방법을 사용하면 위의 기능을 그대로 사용할 수 있습니다.
/**
* .
*/
@Transactional(readOnly = true)
public List<User> listByPermissionName(final String permissionName) {
return getEntityDao().findBy("permissions", "name", permissionName);
}
메모
( 주석 숨기기 )
제공한 방법에는 몇 가지 문제가 있다
: getEntityDao().findBy("permissions", "creator.name", permissionName);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Spring에서 DAO가 순환 호출될 때 데이터가 실시간으로 업데이트되지 않는 해결 방법문제를 설명하기 전에 몇 가지 전제 사항을 설명하십시오. Spring의 구성 파일에서 다음과 같은 방식으로 데이터베이스 트랜잭션을 구성했다고 가정하십시오. 현재 UserDao 및 Security Service가 있습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.