在Hibernate中设置更新和插入属性

Chi*_*lax 11 hibernate properties insert

在hibernate HBM文件中,设置以下属性的目的是什么?

update = "false"
insert = "false"
Run Code Online (Sandbox Code Playgroud)

他们的目的是什么?它们对性能有何不同?我们应该何时使用它们?

Tho*_*s W 11

在计算/派生属性时,或者数据库或触发器负责插入/或更新值时,请使用update ="false",insert ="false".

例如,如果DB将自动生成您要使用的INSERT上的值,则指定insert ="false",以便Hibernate不会在INSERT语句中包含该属性.

另一个例子是通过SQL公式计算/派生的属性:例如,您可以检索每个客户的订单总数.例如:

<property name="totalOrders" insert="false" update="false">
  <formula>(select sum(ORDER.TOTAL) from ORDER where ORDER.FK_CUSTOMER=ID)</formula>
</property>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们设置insert ="false",update ="false",因为这显然是派生结果,我们无法直接更新它.

性能?这不是关于性能 - 而是关于数据库映射需要什么.


JB *_*zet 7

文档:

update,insert(可选 - 默认为true):指定映射列应包含在SQL UPDATE和/或INSERT语句中.将both设置为false允许纯"derived"属性,其值从映射到同一列的某个其他属性初始化,或者由触发器或其他应用程序初始化.

  • 没有优势.如果您不希望更新列(例如,如果它由触发器或其他列更新),则设置update = false.如果您不希望插入列,则将insert设置为false(例如,如果它由触发器或其他列初始化).在99%的情况下,将其保留为默认值:true. (3认同)