2015-10-19 44 views
1

我需要在現有的Spring Boot 1.2.5應用程序中編寫一些臨時代碼,該代碼將執行一些複雜的SQL查詢。複雜的,我的意思是關於4個不同的表格的單個查詢,並且我有許多這樣的表格。我們都決定使用現有的SQL來降低獲取新查詢錯誤的潛在風險,在這種情況下,這是一個好方法。來自Spring/Hibernate的沒有實體映射的原生SQL?

我的應用程序使用JPA/Hibernate並將一些實體映射到表。從我的研究看來,我似乎需要做很多實體映射。

我試着寫一個只會獲得Hibernate會話對象並執行本機查詢的類,但是當它試圖配置會話工廠時,它拋出一個異常,抱怨它找不到配置文件。

我可以從我的一個現有實體做到這一點,或者至少找到一種方法來獲得已經存在的Hibernate會話嗎?

UPDATE:

這裏是例外,這是非常合情合理的,因爲沒有配置文件找到。它的應用程序在屬性文件中配置。

org.hibernate.HibernateException: /hibernate.cfg.xml not found 
at org.hibernate.internal.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:173) 

對於它的價值,代碼:

@NamedNativeQuery(NAME = 「verifyEa」,查詢= 「從per_person選擇account_nm其中account_nm =:帳戶名」) 公共類VerifyEaResult { 私人SessionFactory sessionFact = null;

String accountName; 

private void initSessionFactory() 
{ 
    Configuration config = new Configuration().configure(); 
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).getBootstrapServiceRegistry(); 

    sessionFact = config.buildSessionFactory(serviceRegistry); 
} 


public String getAccountName() 
{ 
    // Quick simple test query 
    String sql = "SELECT * FROM PER_ACCOUNT WHERE ACCOUNT_NM = 'lynnedelete'"; 

    initSessionFactory(); 

    Session session = sessionFact.getCurrentSession(); 


    SQLQuery q = session.createSQLQuery(sql); 

    List<Object> result = q.list(); 

    return accountName; 
} 
} 
+0

分享異常日誌。 – mirmdasif

+0

或者只是使用JDBC ... –

+0

好吧,我發佈了代碼和異常,謝謝。 –

回答

0

您可以使用Data access with JDBC,例如:

public class Client { 
    private final JdbcTemplate jdbcTemplate; 

    // Quick simple test query 
    final static String SQL = "SELECT * FROM PER_ACCOUNT WHERE ACCOUNT_NM = ?"; 

    @Autowired 
    public Client(DataSource dataSource) { 
     jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    public List<Map<String, Object>> getData(String name) { 
     return jdbcTemplate.queryForList(SQL, name); 
    } 


} 
+0

謝謝,我最終做了一件非常相似的事情。 Spring提供了JdbcTemplate Autowired,所以不需要Autowire數據源。 –