我需要在现有的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;
}
}
答案 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());