是否可以在hibernate中将表视为只读?

时间:2012-03-30 21:06:36

标签: java database hibernate orm

我有一些表格,我没有理由在应用程序中更新,所以我想防止它偶然发生在其他地方的错误。

我看到@Immutable注释,但看起来仍然允许插入和删除。我想完整地将整个表格(不仅仅是每个实体)视为石头。有没有一种简单的方法来实现这一目标?或者我是否误解了@Immutable上的文档?

如果需要一个示例,可以说有一个表MONTH表,Month实体和APPOINTMENT表与Appointment实体关联。我永远不想删除或插入一行到月。

2 个答案:

答案 0 :(得分:3)

您是否尝试过只读缓存策略:

  

如果您的应用需要阅读但不能修改,则可以使用持久类的实例,只读缓存。这是最简单和最佳的执行策略。它甚至可以安全地用于集群。

来自:19.2.2. Strategy: read only

答案 1 :(得分:1)

一种方法是通过将READ_ONLY放在方法上来使用@Transactional(readOnly=true)次交易。

http://www.codeinstructions.com/2009/04/read-only-transactions-with-spring-and.html

另一种方法:就隔离级别而言,如果您的表永远不会被插入或更新,您可以使用READ_UNCOMMITTED隔离级别,该级别允许脏读,不可重复读和幻读。然而,这些都不重要,因为数据永远不会改变。

您可以在spring javadocs(http://docs.huihoo.com/javadoc/spring/2.5/org/springframework/transaction/annotation/Isolation.html)中查看每个的不同隔离级别和效果

这将最大程度地释放行上的锁定,并且会给你最佳性能,至少就锁定而言