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