Spring Data JPA从多个表或视图中读取相同的Entity

时间:2018-04-25 19:42:59

标签: hibernate spring-data-jpa

我尝试从具有完全相同列的多个表(或视图)中读取相同的实体。视图是基于实体的聚合,从而产生相同的实体。

例如:

@Entity
@Table("bar")
public class Bar(){
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id; 
    @OneToMany(mappedBy = "bar") 
    private Set<Foo> foos;
}

@Entity
@Table("foo")
public class Foo(){
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;
   private int units;
   private String name;

   @ManyToOne
   private Bar bar; 

}

视图如下所示:

create view sum_foo_with_same_name as
  select
    sum(units) AS units,
    name AS name,
    bar_id AS bar_id
  from foo
  group by name, bar_id;

如何从表和视图中读取Foo的实例? 我还需要获取引用的Bar实例。

1 个答案:

答案 0 :(得分:0)

即使有可能,我认为以这种方式阅读并不是一个好主意。在原则上,实体是一个信息单元。表是实体从内存中消失时存储数据的实体持久性。

JPA可以在一个以上的表中存储一个实体,但这不是您想要的。这适用于单独的索引,大数据,性能等。

我建议使用与Foo相同的字段创建一个投影类(表示视图),并创建第二个只读实体,用于从视图加载数据。之后,您可以创建一个映射器函数来映射表和/或视图中的数据。