2012-03-02 14 views
2

私はHibernateツールEclipseプラグインを使ってDAO実装を生成しましたが、 "javax.persistence.EntityManager"を使用していました。 Spring Frameworkで提供されているHibernateテンプレートを使用するマッピングされたエンティティ(JPAアノテーションを使用)に基づいてDAO implを生成したいと思います。これどうやってするの?DAOの休止ツールと休止テンプレート

+0

オンライン「Skyway builder」が見つかりました。便利なツールですか? – observer

+2

HibernateTemplateはほとんど廃止されました(ドキュメントはもはやそれを使用しないよう勧めます)。あなた自身でDAOを生成するのはどうですか?あなたは魔法のツールがあなたのためにそれらを生成する以上のことを学ぶでしょう。 –

+0

アドバイスをいただきありがとうございます。だから私はデフォルトのEntityManagerを使うことができますか? – observer

答えて

0

これは、Spring Frameworkによって提供されるHibernateテンプレートを使用して、DAO Implの汎用実装に基づいてDAOオブジェクトを生成する方法です。 、WMGenericDaoインタフェースがある

の生成DAOのJava FTLとクラス、そしてサンプルが

@Repository("hrdb.UserDao") 
public class UserDao extends WMGenericDaoImpl <User, Integer> { 

    @Autowired 
    @Qualifier("hrdbTemplate") 
    private HibernateTemplate template; 

    public HibernateTemplate getTemplate() { 
     return this.template; 
    } 
} 

のように見え、これは私たちの一般的なDAOのIMPLは勿論ここ

public abstract class WMGenericDaoImpl<Entity extends Serializable, Identifier extends Serializable> implements WMGenericDao<Entity, Identifier> { 

    private Class<Entity> entityClass; 

    public abstract HibernateTemplate getTemplate(); 

    @SuppressWarnings("unchecked") 
    @PostConstruct 
    public void init() { 
     if (getTemplate() == null) 
      throw new RuntimeException("hibernate template is not set."); 

     ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass(); 
     this.entityClass = (Class<Entity>) genericSuperclass.getActualTypeArguments()[0]; 
    } 

    public Entity create(Entity entity) { 
     Identifier identifier = (Identifier) getTemplate().save(entity); 
     return findById(identifier); 
    } 

    public void update(Entity entity) { 
     getTemplate().update(entity); 
     getTemplate().flush(); 
    } 

    public void delete(Entity entity) { 
     getTemplate().delete(entity); 
    } 

    public Entity findById(Identifier entityId) { 
     return getTemplate().get(entityClass, entityId); 
    } 
} 

どのように見えるかです

public interface WMGenericDao<Entity, Identifier> { 

    Entity create(Entity entity); 

    void update(Entity entity); 

    void delete(Entity entity); 

    Entity findById(Identifier entityId); 
} 

そしてHibernateTemplateはspring.xmlで宣言されています。 この種の実装では、Springによって提供されるhibernateテンプレートを使用して、リバースエンジニアリングプロセスでAll DAOクラスを生成することができます。

0

TypeToolsをご覧ください。 READMEにはgeneric DAOの例があります:

class Device {} 
class Router extends Device {} 

class GenericDAO<T, ID extends Serializable> { 
    protected Class<T> persistentClass; 
    protected Class<ID> idClass; 

    private GenericDAO() { 
    Class<?>[] typeArguments = TypeResolver.resolveRawArguments(GenericDAO.class, getClass()); 
    this.persistentClass = (Class<T>) typeArguments[0]; 
    this.idClass = (Class<ID>) typeArguments[1]; 
    } 
} 

class DeviceDAO<T extends Device> extends GenericDAO<T, Long> {} 
class RouterDAO extends DeviceDAO<Router> {}