Spring / Hibernate的原生SQL没有实体映射?

时间:2015-10-19 22:56:15

标签: spring hibernate jpa

我需要在现有的Spring Boot 1.2.5应用程序中编写一些临时代码来执行一些复杂的SQL查询。复杂的,我的意思是关于4个不同的表的单个查询,我有很多这些。我们都决定使用现有的SQL来降低新查询错误的潜在风险,在这种情况下这是一个很好的方法。

我的应用程序使用JPA / Hibernate并将一些实体映射到表。根据我的研究,似乎我必须做很多实体映射。

我尝试编写一个只获取Hibernate会话对象并执行本机查询的类,但是当它尝试配置会话工厂时,它抛出一个异常,抱怨它无法找到配置文件。

我是否可以从我现有的某个实体中执行此操作,或者至少找到一种方法来获取已存在的Hibernate会话?

更新:

这是一个例外,因为没有要查找的配置文件,所以它非常有意义。它的应用程序在属性文件中配置。

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

对于它的价值,代码:

@NamedNativeQuery(name =“verifyEa”,query =“select per_person select account_nm,其中account_nm =:accountName”) 公共类VerifyEaResult {     private 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;
}
}

2 个答案:

答案 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);
    }


}

答案 1 :(得分:0)

简短的方法是:

jdbcTemplate.queryForList("SELECT 1", Collections.emptyMap());