java - 使用 native 查询但保持数据库独立性

标签 java spring jpa spring-data-jpa

使用 Spring JPA 是否有一种简单的方法来使用 native 查询但保持数据库独立性,例如使用最适合的查询?

目前,我通过检查 Environment 中当前设置的 Dialect 并调用我的 Repository 的正确方法来执行此操作:

public Foo fetchFoo() {
    if (POSTGRES_DIALECT.equals(env.getRequiredProperty("hibernate.dialect"))) {
      return repo.postgresOptimizedGetFoo();
    }    
    return repo.getFoo();
}

这行得通,但我觉得有更好的方法,或者我遗漏了一些东西。特别是因为 (Spring) JPA 允许它很容易地使用 native 查询,但这破坏了它的一大优势:数据库独立性。

最佳答案

根据我的理解,这可以简单地通过使用 @Transactional(readOnly=false) 来实现,然后可以使用 而不是调用 session.createQuery>session.createSQLQuery,如本示例中所提供的。 您的 sql 可以是您的任何 native 查询。 希望这对你有用。 :)

@Override
@Transactional(readOnly = false)
public Long getSeqVal() {
Session session = entityManager.unwrap(Session.class);
String sql = "SELECT nextval('seqName')";
Query query = session.createSQLQuery(sql);
BigInteger big = (BigInteger) query.list().get(0);
return big.longValue();
}

关于java - 使用 native 查询但保持数据库独立性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33475886/

相关文章:

java - 使用 Java 接口(interface)从 native 查询获取结果

将 jar 标记为提供时出现 java.lang.NoClassDefFoundError

java - org.springframework.beans.factory.UnsatisfiedDependencyException org.springframework.beans.factory.NoUniqueBeanDefinitionException

java - 模拟测试依赖注入(inject)的对象

java - JPA持久化上下文什么时候结束?

java - 使用 Spring Data 和 HIbernate JPA 进行延迟加载

java - 如何在 Eclipse 中使用 Java 的 WebDriver

java - Solr 中的日志文件

java - 你会使用 AOP 来跟踪积分吗?

mysql - 使用 MySQL,为什么 Hibernate/JPA 不为我创建外键约束?