当前位置: 首页 > 知识库问答 >
问题:

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

曹泉
2023-03-14

我需要在我现有的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="verfyEa", query="从per_person中选择account_nm其中account_nm=:帐户名称")公共类VerifyEaResult{Private SessionFactory sesionFact=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个答案

子车才捷
2023-03-14

短的方法是:

jdbcTemplate.queryForList("SELECT 1", Collections.emptyMap());
申博厚
2023-03-14

您可以将数据访问与 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);
    }


}
 类似资料:
  • 问题内容: 在我的applicationContext.xml中,这就是将xml映射到POJO的方式。如何将目录映射到类文件而无需创建xml? 问题答案: 您可以通过转换进一步简化操作 至 现在您的包中所有带有注释的类都将自动被拾取。

  • 我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。

  • 我在配置类中使用spring boot和hibernate。未映射我的实体。请参阅下面的错误。在看了其他一些关于这个的stackoverflow页面后,我仍然无法理解。 我相信以下是正确的:HQL、@实体、@表 错误。 实体。 DAO类 当我将getMessages方法主体替换为以下内容时,它会起作用 数据库表名称为“消息”。 SpringBoot类 Hibernate配置类 我错过了什么?

  • 在web应用程序上,我们使用Spring 3.2和Hibernate 4.1.1,并实现了一个类似插件的架构。插件可以在运行时添加和删除。对于每个模块,我们定义了一个单独的类加载器,并在spring上创建了单独的子应用程序上下文。完整的配置是使用注释完成的,不再需要对beans进行XML配置。 Spring Hibernate配置类 现在的问题是:一些插件包含自己的实体(DAO)类,这些类在运行时

  • 我的用户实体: 我的角色实体: 现在,在数据库中创建的相应中间表具有以下属性。

  • Hi编写Spring应用程序,使用Spring Security。这是我的用户和帐户角色数据库: 我的实体类: 当我尝试登录我的系统我有错误: Hibernate:选择userrolese0_. username作为username3_1_0_,userrolese0_. id作为id1_0_0_,userrolese0_. id作为id1_0_1_,userrolese0_. name作为nam