有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用本机查询,但保持数据库独立性

有了Spring JPA,有没有一种简单的方法来使用本机查询,但保持数据库独立性,例如使用最适合的查询

目前,我通过从Environment中检查当前设置的Dialect,并调用我的Repository的正确方法来实现这一点:

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

这很有效,但我觉得有更好的方法,或者我错过了什么。特别是因为(Spring)JPA允许它非常轻松地使用本机查询,但这打破了它的一个巨大优势:数据库独立性


共 (1) 个答案

  1. # 1 楼答案

    根据我的理解,这可以通过使用@Transactional(readOnly=false)而不是调用会话来实现。创建查询时,可以使用会话。createSQLQuery,如本例所示。 sql可以是任何本机查询。 希望这对你有用。:)

    @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();
    }