2016-11-30 7 views
2

私は、BaseDaoInterfaceクラスを実装するBaseDaoクラスを拡張するInboundMessageDaoクラスを持っています。サブクラスによってメソッドの具体的な実装が無視されていますか?

BaseDaoクラスは抽象クラスであり、具体的かつ抽象的なメンバーメソッドを提供します。 なんらかの理由で、Eclipseは、BaseDaoで具体的な実装が提供されているにもかかわらず、BaseDaoInterfaceから永続性、更新性、削除性を実装していないという点でclamingです。

私は別のサブクラスであるUserDaoが同じことをしていますが、実装されていないメソッドについてはエラーはありません。

BaseDao.java

package com.MYPKG.data.dao; 

import java.text.MessageFormat; 
import java.util.List; 

import org.hibernate.Session; 
import org.hibernate.Transaction; 
import org.springframework.core.GenericTypeResolver; 

import com.MYPKG.model.User; 

public abstract class BaseDao <T> implements BaseDaoInterface<T, String> { 
    private Session currentSession; 
    private Transaction currentTransaction; 

    public BaseDao() { 
    } 

    public Session openCurrentSession() { 
     currentSession = HibernateUtil.getSession(); 
     return currentSession; 
    } 

    public Session openCurrentSessionwithTransaction() { 
     currentSession = HibernateUtil.getSession(); 
     currentTransaction = currentSession.beginTransaction(); 
     return currentSession; 
    } 

    public void closeCurrentSession() { 
     currentSession.close(); 
    } 

    public void closeCurrentSessionwithTransaction() { 
     currentTransaction.commit(); 
     currentSession.close(); 
    } 
    public Session getCurrentSession() { 
     return currentSession; 
    } 

    public void setCurrentSession(Session currentSession) { 
     this.currentSession = currentSession; 

    } 

    public Transaction getCurrentTransaction() { 
     return currentTransaction; 
    } 

    public void setCurrentTransaction(Transaction currentTransaction) { 
     this.currentTransaction = currentTransaction; 
    } 


    public void persist(User entity) { 
     getCurrentSession().save(entity); 
    } 

    public void update(User entity) { 
     getCurrentSession().update(entity); 
    } 

    public abstract T findById(String id) ; 

    public void delete(User entity) { 
     getCurrentSession().delete(entity); 
    } 

    public abstract List<T> findAll() ; 

    public void deleteAll() { 
     List<T> objects = findAll(); 
     for (T object : objects) 
      getCurrentSession().delete(object); 
    } 
} 

BaseDaoInterface.java

package com.MYPKG.data.dao; 

import java.io.Serializable; 
import java.util.List; 

public interface BaseDaoInterface <T, Id extends Serializable>{ 

    public void persist(T entity); 

    public void update(T entity); 

    public T findById(Id id); 

    public void delete(T entity); 

    public List<T> findAll(); 

    public void deleteAll(); 

} 

InboundMessageDao.java

package com.MYPKG.data.dao; 

import java.text.MessageFormat; 
import java.util.List; 

import com.MYPKG.model.InboundMessage; 
import com.MYPKG.model.User; 

public class InboundMessageDao extends BaseDao<InboundMessage>{ 

    ///// PROBLEM 
    ///// The type InboundMessageDao must implement the inherited abstract method BaseDaoInterface<InboundMessage,String>.update(InboundMessage) 
    ///// 

    public InboundMessageDao() { 

    } 

    @Override 
    public InboundMessage findById(String id) { 
     InboundMessage object = (InboundMessage) getCurrentSession().get(InboundMessage.class, id); 
     return object; 
    } 

    @Override 
    public List<InboundMessage> findAll() { 
     @SuppressWarnings("unchecked") 
     List<InboundMessage> objects = (List<InboundMessage>) getCurrentSession().createQuery(MessageFormat.format("from {0}", "inbound_message")).list(); 
     return objects; 
    } 

} 

UserDao.java

package com.MYPKG.data.dao; 

import java.text.MessageFormat; 
import java.util.List; 

import org.hibernate.Session; 
import org.hibernate.Transaction; 

import com.MYPKG.model.User; 

public class UserDao extends BaseDao<User>{; 

    public UserDao() { 
    } 

    public List<User> findAll() { 
     @SuppressWarnings("unchecked") 
     List<User> objects = (List<User>)getCurrentSession().createQuery(MessageFormat.format("from {0}", "user")).list(); 
     return objects; 
    } 

    public User findById(String id) { 
     User object = (User) getCurrentSession().get(User.class, id); 
     return object; 
    } 


} 
+0

「InboundMessage」とは何ですか? –

+0

@PritamBanerjee:エンティティを表すPOJO –

+0

@jonhopkins:うわー、ジェネリックタイプではなくUserクラスでマークしたとは思えません。答えとして投稿できますか? –

答えて

2

BaseDaoクラスは汎用<T>で定義されているため、Userの代わりにTを使用してオーバーライドされたメソッドを定義する必要があります。これらのメソッドに@Overrideアノテーションを追加すると、実際にはインターフェイスのメソッドをオーバーライドするのではなく、独自のメソッドであることがわかります。

+0

これは良い答えです。 –

関連する問題