2012-11-25 126 views
1

我有一個需求,我需要從對象中插入數據庫,該對象包含有關每個列的表名和值的信息。 您能否就Hibernate實現這個最佳方式給出建議。插入數據庫的最佳方法?

Java類

public class InsertDataDetails { 
    public String tableName; 
    public List ColumnDetails> columnDetails; 
} 

public class ColumnDetails { 
    public String columnName; 
    public String columnValue; 
} 

目前我正在考慮創建一個本地查詢與和Session.execute查詢執行它。但是我正在尋找更好的設計,我們可以使用DTO類和休眠功能。

回答

0

所有這些建議都過於以關係爲中心並且過於簡單。我建議你放棄這種方法。

你應該考慮你試圖解決的問題而不是持久性問題。如果您想使用Hibernate,它可以將問題的OO表示映射到關係模式。

我還建議您閱讀Martin Fowler的Patterns of Enterprise Application Architecture以瞭解持久性問題是如何通過對象解決的。

Google for Data Access Object。下面是一個簡單通用的一個,很容易使用Hibernate實現和擴展:

package persistence; 

public interface GenericDao<K, V> { 
    V find(K id); 
    List<V> find(); 
    K insert(V value); 
    void update(V value); 
    void delete(V value); 
} 

持續性對象方面已經解決了許多倍,是最好的,是可以做到的。你所提出的建議並不代表對現有技術狀態的有意義的改進。

+0

您的文章的最後一段似乎過於苛刻,並不符合堆棧溢出的精神。 http://blog.stackoverflow.com/2012/07/kicking-off-the-summer-of-love/ –

+0

感謝您的回覆。我們已經爲您提到的類似接口提供了一個實現類。問題是如何從InsertDataDetails類創建DTO對象()。 – Abhilash

+0

請勿使用DTO;只需使用你的模型類。 – duffymo

1

儘管你的問題沒有提到Spring,但我認爲值得大聲呼籲Spring Data項目。

這爲持久性提供了非常強大的存儲庫,不需要除聲明接口之外的任何實現。

例如:

public interface UserRepository extends JpaRepository<User,Long> {} 

給你一個完全工作的DAO類對象,User S,用的方法,如:

List<User> findAll(); 
User findOne(Long id); 
User save(User entity); 

不過,爲了利用這一點,你會需要遵循@Duffymo的建議,並且圍繞它們代表的對象建模你的類,而不是它們的持久性。

+0

+1推薦Spring。這是一個很好的主意,但我敢打賭它超過了OP的頭。 – duffymo

+0

感謝您的建議。我們也在使用Spring,並且還有一個類似於您提到的實現類。你能否解釋一下「圍繞他們所代表的對象建模你的類,而不是他們的持久性」。 – Abhilash

相關問題