gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 02:40:52 25 4
gpt4 key购买 nike

使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com