Spring JPA可以跨不同的模式查询同一个表



我对Oracle数据库使用Spring JPA,我希望能够在两个不同的模式/数据库(例如db1.car和db2.car(中查询同一个表

我的域对象将是非常标准的,如下所示。如果我有一个db1.car表和一个anddb2.car表,有没有办法通过控制器将模式/db限定符传递给域对象?

@Entity
@Table(name = "car")
public class Car {
...
}

或者,有没有一种方法可以将限定的表名传递到命名查询中?似乎没有,因为这似乎不起作用(即,":qualifiedcar"导致Spring自动布线错误(:

public interface CarRepository extends JpaRepository<Person, String> {
@Query("select p from :qualifiedcar p where p.type in (:type)")
List<Person> findByQualifiedPersonAndType(@Param("qualifiedcar") String qualifiedcar, @Param("type") String type);
}

为了澄清,也许Oracle没有使用模式这个术语。将它们称为不同的数据库可能更准确。

要在实体中指定模式,您必须按如下方式执行:

@Entity
@Table(name = "car", schema = "db1")
public class CarS1 {
...
}
@Entity
@Table(name = "car", schema = "db2")
public class CarS2 {
...
}

关于第二个问题,我将尝试使用以下程序化命名查询:

String dinamicQuery = "Select * from ";
String resultMapping = "";
if (schema.equals("db1")){
dinamicQuery = dinamicQuery + "table1 ";
resultMapping = "test1"
}else{
dinamicQuery = dinamicQuery + "table2 ";
resultMapping = "test2"
}
Query q = em.createNativeQuery(dinamicQuery,resultMapping);
em.getEntityManagerFactory().addNamedQuery("selectDinamic", q);
return em.createNamedQuery("selectDinamic",Piloto.class).getResultList();

resultMapping是在实体中定义的,对于在查询中格式化对象是必要的

@SqlResultSetMappings({
@SqlResultSetMapping(name="test1",
classes = {
@ConstructorResult(
targetClass = Cars1.class,
columns = {
@ColumnResult(name = "id", type = Long.class),
[...]
})
})
})
@Entity
@Table(name = "car", schema = "db1")
public class CarS1 {
[...]
}

相关内容

  • 没有找到相关文章

最新更新