我们目前有一个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 {
}
答案 0 :(得分:21)
有关JPA和数据库视图的更多信息,请参阅http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Views
在JPA中,您可以使用@Table注释映射到与表格相同的
VIEW
。然后,您可以将视图中的每个列映射到对象的属性。视图通常是只读的,因此对象的视图映射通常也是只读的。在大多数数据库中,视图也可以更新,具体取决于它们封装的查询复杂程度。即使对于复杂的查询,数据库触发器通常也可用于更新到视图中。
答案 1 :(得分:7)
大多数现代RDBMS都支持可插入和可更新的视图。 如果您的RDBMS支持它,那么您应该没有任何问题。与表相同的视图应该在支持此类视图的任何RDBMS中可更新。因此,您只需要更改映射并将表名替换为视图名称。