Umesh 나는 우리가이 기능
인터페이스를 구현하는 방법을 보여줍니다 사전에이
감사가 달성 할 경우 제 질문은
public interface Repository<INSTANCE_CLASS, PRIMARY_KEY_CLASS> {
void add(INSTANCE_CLASS instance);
void merge(INSTANCE_CLASS instance);
void remove(PRIMARY_KEY_CLASS id);
INSTANCE_CLASS findById(PRIMARY_KEY_CLASS id);
INSTANCE_CLASS findById(PRIMARY_KEY_CLASS id, Class fetchingStrategy, Object... args);
List<INSTANCE_CLASS> findAll();
List<INSTANCE_CLASS> findAll(Class fetchingStrategy, Object... args);
List<INSTANCE_CLASS> findAll(int pageNumber, int pageSize);
List<INSTANCE_CLASS> findAll(int pageNumber, int pageSize, Class fetchingStrategy, Object... args);
List<INSTANCE_CLASS> findAllByCriteria(Criteria criteria);
List<INSTANCE_CLASS> findAllByCriteria(Criteria criteria, Class fetchingStrategy, Object... args);
List<INSTANCE_CLASS> findAllByCriteria(int pageNumber, int pageSize, Criteria criteria);
List<INSTANCE_CLASS> findAllByCriteria(int pageNumber, int pageSize, Criteria criteria, Class fetchingStrategy, Object... args);
}
위의 모든 방법이 필요하지 않으므로 초록을 만듭니다 당신이 유일한 방법을 추가 할 필요가있는 저장소를 원하는 경우 다른 개발자가 액세스하려고하면 더미 구현 이제
public abstract class AbstractRepository<INSTANCE_CLASS, PRIMARY_KEY_CLASS> implements Repository<INSTANCE_CLASS, PRIMARY_KEY_CLASS> {
public void add(INSTANCE_CLASS instance) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void merge(INSTANCE_CLASS instance) {
throw new UnsupportedOperationException("Not supported yet.");
}
public void remove(PRIMARY_KEY_CLASS id) {
throw new UnsupportedOperationException("Not supported yet.");
}
public INSTANCE_CLASS findById(PRIMARY_KEY_CLASS id) {
throw new UnsupportedOperationException("Not supported yet.");
}
public INSTANCE_CLASS findById(PRIMARY_KEY_CLASS id, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll() {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll(Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll(int pageNumber, int pageSize) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAll(int pageNumber, int pageSize, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(Criteria criteria) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(Criteria criteria, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(int pageNumber, int pageSize, Criteria criteria) {
throw new UnsupportedOperationException("Not supported yet.");
}
public List<INSTANCE_CLASS> findAllByCriteria(int pageNumber, int pageSize, Criteria criteria, Class fetchingStrategy, Object... args) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
에게 존재의 목적 클래스 는, 예를 들어, 당신은
public class PersonRepository extends AbstractRepository<Person, Integer> {
public void add(Person instance) {
/**
* person implmentatiuon goes here
*/
}
}
을 사용할 수 있습니다 메소드를 추가하는 것 이외에, 그는 얻을 것이다 UnsupportedOperationException
기준 는 단지 마커 인터페이스이다.
public interface Criteria {}
몇 가지 방법의 목적은 클래스 fetchingStrategy 가 구체화 명명 된 쿼리와 일치하는 매개 변수를 정의합니다. 이렇게하면 오류가 발생하기 쉬운 코드 문자열을 피할 수 있습니다. 이 접근법은 예를 들어 그룹 속성의 유효성을 검사하기 위해 JSR-303 bean validation에 사용됩니다. 내가 주소로 사람을 모두 검색 할 때, 내가 전화
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<query name="PERSON_WITH_ADDRESS">
<![CDATA[
from
Person p
left join fetch
p.address
]]>
</query>
</hibernate-mapping>
다음과 같이 here
public class Person {
public static interface PERSON_WITH_ADDRESS {}
}
참조 쿼리라는 구체화 된이 표시됩니다
PersonRepository<Person, Integer> respository ...
List<Person> personList = repository.findAll(PERSON_WITH_ADDRESS.class);
findall은이 같이 쓸 수있다
public class PersonRepository extends AbstractRepository<Person, Integer> {
List<Person> findAll(Class fetchingStrategy, Object... args) {
if(fetchingStrategy.isAssignableFrom(PERSON_WITH_ADDRESS.class)) {
sessionFactory.getCurrentSession()
.getNamedQuery(fetchingStrategy.getSimpleName())
.list();
}
throw new UnsupportedOperationException("Not supported yet.");
}
}
정말 좋고 매우 유익한 대답 –
@umesh awasthi 내 대답은 귀하의 필요를 fullfil 또는 유용하다면, 허용 또는 그것을 UPvote를 제공합니다. 고맙습니다! –
사용자 클래스의 정적 최종 문자열에 반대되는 마커 인터페이스를 사용하면 어떤 이점이 있는지/설명 할 수 있습니까? –