JPA和表格视图。可以吗?

时间:2013-05-22 08:01:52

标签: java java-ee jpa view ejb-3.0

我们目前有一个Java EE系统,我们使用JPA映射到我们的数据库。它是一个相当完善的系统,有大约20个实体。

我们现在已被命令将视图用于所有内容。例如:如果我们有一个名为 PERMISSION 的表格,那么我们还需要一个名为 PERMISSION_VIEW 的视图。基本上我们需要对每个表执行此操作,并且我们的应用程序只能通过查询视图来访问数据。

现在我们所有的实体bean都是这样的:

@Entity
@Table(name = "PERMISSION")
@NamedQueries({
        @NamedQuery(name = "Permission.findByPK", query = "SELECT p FROM Permission p WHERE p.dpNum = :dpNumber"),
        @NamedQuery(name = "Permission.deleteAll", query = "DELETE FROM Permission") })
public class Permission implements Serializable {

}
  • 首先,如果只允许使用Views,如何更新表。物化视图可以为此工作吗?
  • 其次,如果我们只能使用Views,那么需要多少重写?例如。对于每个entiry,我们需要编写 @Table(name =“PERMISSION_VIEW”)来描述实体,但是,在进行更新时,它需要对PERMISSION表执行此操作。你究竟如何在实体bean中合并它?

2 个答案:

答案 0 :(得分:21)

有关JPA和数据库视图的更多信息,请参阅http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Views

  

在JPA中,您可以使用@Table注释映射到与表格相同的VIEW。然后,您可以将视图中的每个列映射到对象的属性。视图通常是只读的,因此对象的视图映射通常也是只读的。在大多数数据库中,视图也可以更新,具体取决于它们封装的查询复杂程度。即使对于复杂的查询,数据库触发器通常也可用于更新到视图中。

答案 1 :(得分:7)

大多数现代RDBMS都支持可插入和可更新的视图。 如果您的RDBMS支持它,那么您应该没有任何问题。与表相同的视图应该在支持此类视图的任何RDBMS中可更新。因此,您只需要更改映射并将表名替换为视图名称。

相关问题