2017-05-08 91 views
0

我正在寻找一些能够让我复制像Jackson的@JsonView功能但在数据库级别上的东西。通常我觉得我已经碰到了困难,试图在查询性能和从API返回所有必要数据之间取得平衡。有没有一种方法来表示hibernate的数据视图?

比如我有一个类结构,如:

class Employee { 
    String name; 

    @ManyToOne(fetchType = EAGER) 
    Company company; 

    // A lot of other data 
} 

class Company { 
    String name; 

    // A lot of other data 
} 

现在我想以显示员工列表,另外在表格中显示每个员工的公司名称。理想的情况是在原始SQL世界里,我会做类似

select e.name, c.name from Employees as e left join Companies as c on e.companyId = c.id 

但什么,而不是发生的是Hibernate查询全公司的数据,以及包括其他的关系和他们的关系,这往往使得它很慢。延迟加载速度也较慢,在您需要从控制器返回查询数据时不起作用。

也许有一些东西,可以让我在这样的方式宣告数据视图:

class EmployeeListView { 
    String name = Path.to("Employee.name"); 
    String companyName = Path.to("Employee.company.name") 
} 

+0

想你可以使用[Ehcahe(http://www.ehcache.org/documentation/2.8/hibernate/) –

+0

你一定能创建一个数据库提高休眠性能查看指定的查询并将其映射到像帖子中显示的“EmployeeListView”这样的实体类。 Hibernate不区分底层数据库对象是表还是视图。您需要确保您不允许在视图上进行任何修改查询('INSERT','UPDATE'和'DELETE')(因为它们在视图中是无意义的)。 – manish

+0

@manish关心显示我会怎么做? – doctorgester

回答

0

@NamedEntityGraph是答案,任何人都关心

相关问题