该类必须声明为抽象错误

时间:2020-10-27 16:54:58

标签: java spring hibernate jpa

我在使用通用抽象类和多个参数时遇到麻烦。简而言之,我有一个数据库表,其中包含由ProductAttributeEntity.class和ProductAttributeEntityPk.class定义的组合键,其中ProductAttributeEntityPk.class是组合键。我正在努力将ProductAttributeEntityPk.class传递到getById方法的抽象类中,这使我“必须将类声明为抽象或实现抽象方法”错误。

如何解决这个问题?

PS::我是Java的

抽象DAO类(https://pastebin.com/n2FBQCg2

package com.beetlehand.model.dao;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import java.util.List;
import java.util.Map;

public abstract class AbstractDao<T, S> {

    protected EntityManager entityManager;

    public EntityManager getEntityManager() {
        if(this.entityManager == null) {
            this.entityManager = Persistence
                .createEntityManagerFactory("NewPersistenceUnit")
                .createEntityManager();
        }

        return this.entityManager;
    }

    public abstract T getById(S id);
    public abstract T getOneBy(Map<String, Object> params);
    public abstract List<T> getBy(String predicates, Map<String, Object> params);
    public abstract List<T> getBy(String predicates, Map<String, Object> params, String orderBy);
    public abstract List<T> getBy(String predicates, Map<String, Object> params, String orderBy
            , Integer limit);
    public abstract List<T> getBy(String predicates, Map<String, Object> params, String orderBy
            , Integer limit, Integer offset);

    public abstract Long count();
    public abstract Long countBy(String predicates, Map<String, Object> params);
}

DAO类(https://pastebin.com/tkMYLVZE

package com.beetlehand.model.dao;

import com.beetlehand.model.ProductAttributeEntity;
import com.beetlehand.model.ProductAttributeEntityPk;
import org.apache.commons.lang3.StringUtils;

import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.TypedQuery;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class ProductAttributeDao extends AbstractDao<ProductAttributeEntity, ProductAttributeEntityPk> {

    public ProductAttributeEntity getById(ProductAttributeEntityPk id) {
        if (id == null) return null;
        return getEntityManager().find(ProductAttributeEntity.class, id);
    }
    
    /** other methods implementation **/

}

实体类(https://pastebin.com/5YySBt7Xhttps://pastebin.com/8rwD4kec

package com.beetlehand.model;

import javax.persistence.*;

@Entity
@Table(name = "product_attribute", schema = "beetlehand", catalog = "")
@IdClass(ProductAttributeEntityPK.class)
public class ProductAttributeEntity {
    private int productId;
    private int attributeValueId;

/** getter, setters, equals and hashcode implementation **/

}


package com.beetlehand.model;

import javax.persistence.Column;
import javax.persistence.Id;
import java.io.Serializable;

public class ProductAttributeEntityPK implements Serializable {
    private int productId;
    private int attributeValueId;

/** getter, setters, equals and hashcode implementation **/
}

0 个答案:

没有答案