JPA和表格视图.可以吗?

Oli*_*ins 21 java jpa view java-ee ejb-3.0

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

我们现在被命令使用Views来做所有事情.例如:如果我们有一个名为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 {

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

Jam*_*mes 22

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

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


nak*_*spy 7

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

  • 我所知道的所有JPA实现都基于JDBC.无论T是表还是视图,SQL语句都将是相同的(插入到T ...中).这就是为什么我认为它只依赖于RDBMS来支持可更新视图,而JPA实现不需要知道它.除非我遗漏了什么. (3认同)