안녕하세요, db에서 long 요소 유형의 ID로 다운로드 할 일반 모델/엔티티 클래스를 갖고 싶습니다. 그 방법은 다음과 같이이다 : DAO 인터페이스 및 구현을 사용하여 일반 Abstract Entity 클래스 구현
public class GenericModel {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
public static GenericModel getBy(Long id) {
return JPA.em().find(GenericModel.class, id);
}
}
그러나 동적으로 DB에서 찾을 엔티티 클래스 이름을 선언하는 아동 모델 클래스 I'have으로 연장됩니다 일반 모델
.getById()와 같은 공통 메소드가있는 generic 엔티티 클래스를 갖고 싶습니다. 그리고 그 일반 클래스는 Concret 엔터티 클래스에 의해 확장 될 것입니다. 각 모델 클래스에 동일한 메소드를 쓰지 않아도되므로 일반 클래스에서 상속됩니다. -
어떻게해야합니까?
여기 내 DAO 인터페이스입니다. 나는 그것의 아주 확실하지 않다 :이 인터페이스
@Repository
public class GenericModelDaoImpl <T extends GenericModel> implements GenericModelDao {
public Class<T> entityClass;
GenericModelDaoImpl(){
setEntityClass(((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
}
public void setEntityClass(Class<T> entityClass) {
this.entityClass = entityClass;
}
@Autowired
private SessionFactory sessionFactory;
private Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
@Override
public T get(long id) {
return (T) getCurrentSession().get(entityClass, id);
}
@Override
public void delete(long id) {
T entityClass = get(id);
getCurrentSession().delete(entityClass);
}
@Override
public List<T> get() {
return getCurrentSession().createQuery("from " + entityClass).list();
}
@Override
public void add(Object entityClass) {
getCurrentSession().save(entityClass);
}
@Override
public void update(Object entityClass) {
getCurrentSession().update(entityClass);
}
}
그리고 내 GenericModel 등급
@MappedSuperclass
public abstract class GenericModel<T extends GenericModel> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
의
public interface GenericModelDao<T> {
public void add(T entityClass);
public void update(T entityClass);
public void delete(long id);
public T get(long id);
public List<T> get();
}
그리고 내 DAO 구현 클래스가 한 번 더 나에게 몇 가지 추가 도움을주십시오 : D
당신이하고 싶은 것을 이해하십시오. – huidube
getById()와 같은 공통 메소드가있는 일반 엔티티 클래스를 갖고 싶습니다. 그리고 그 일반 클래스는 Concret 엔터티 클래스에 의해 확장 될 것입니다. 각 모델 클래스에 동일한 메소드를 작성하지 않아도되므로 일반 클래스에서 상속받습니다. – masterdany88