hibernate 中 inverse 的作用

inverse 常用在 一对多 双向关联关系中。

以一个订单( Order) 和 item 为例

实体类:Order

public class Order {
	private int id;
	private int userId;
	private int status;
	private long orderTime;
	private String orderDesc;
	private double totalPrice;
	private String receiveName;
	private String fullAddress;
	private String postalCode;
	private String phone;
	private String mobile;
	private Set<Item> items=new HashSet<Item>();

实体类 Item

	private int id;
    private Order order;
	private int productId;
	private String productName;
	private double dangPrice;
	private int productNum;
	private double amount;

Item.hbl.xml

<hibernate-mapping>
	<class name="tarena.entity.Item" table="d_item">
		<id name="id" column="id" type="integer">
			<generator class="native"></generator>
		</id>
		<!-- 采用多对一关系加载order属性值 -->
	<many-to-one name="order"  column="order_id" cascade="save-update"
			class="tarena.entity.Order">
		</many-to-one>
		<!-- 
		<property name="orderId" column="order_id" 
			type="integer">
		</property>
		 -->
		<property name="productId" column="product_id" 
			type="integer">
		</property>
		<property name="productName" column="product_name" 
			type="string">
		</property>
		<property name="dangPrice" column="dang_price" 
			type="double">
		</property>
		<property name="productNum" column="product_num" 
			type="integer">
		</property>
		<property name="amount" column="amount" 
			type="double">
		</property>
	</class>
</hibernate-mapping>

order.hbl.xml

<hibernate-mapping>
	<class name="tarena.entity.Order" table="d_order">
		<id name="id" column="id" type="integer">
			<generator class="identity"></generator>
		</id>
		<property name="userId" column="user_id" 
			type="integer">
		</property>
		<property name="status" column="status" 
			type="integer">
		</property>
		<property name="orderTime" column="order_time" 
			type="long">
		</property>
		<property name="orderDesc" column="order_desc" 
			type="string">
		</property>
		<property name="totalPrice" column="total_price" 
			type="double">
		</property>
		<property name="receiveName" column="receive_name" 
			type="string">
		</property>
		<property name="fullAddress" column="full_address" 
			type="string">
		</property>
		<property name="postalCode" column="postal_code" 
			type="string">
		</property>
		<property name="phone" column="phone" 
			type="string">
		</property>
		<property name="mobile" column="mobile" 
			type="string">
		</property>
		<!-- 利用一对多关系加载items集合属性 -->
		<set name="items"  cascade="save-update"  inverse="false">
			<!-- 指定关联条件,指定外键字段 -->
			<key column="order_id"></key>
			<one-to-many class="tarena.entity.Item"/>
		</set>
		
	</class>
</hibernate-mapping>

test:


public class test {
public static void main(String[] args) {
	Session session = HibernateUitl.getSession();
	Order o=new Order();
	o.setPhone("123");
	Item item1=new Item();
	Item item2=new Item();
	item1.setProductName("123");
	item2.setProductName("1233");
	o.getItems().add(item1);
	o.getItems().add(item2);
	 item1.setOrder(o);
     item2.setOrder(o);	
      session.save(o);
}
}




当order.hbl.xml 的 inverse = false 的时候,说明了现在现在由 order 控制着这个关系,所以,这个时候,当 order 改变的时候, Items 也会发生改变。

会有两条update 语句执行。修改 item 的 order 属性。


当order.hbl.xml 的 inverse = true 的时候,只会执行 3条插入语句。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值