hibernate 用联接表映射

用联接表映射: 
表示从Shipment到Item关联的属性成为auction: 
<class name="Shipment" table="Shipment">
    <id name="shipmentId" column="SHIPMENT_ID" type="integer">
        <generator class="native"/>
    </id>
    <property name="money" type="double" column="MONEY"/>
	<!-- 因为必须用一个外键列 映射这个关联,因此在XML中你需要
		<many-to-one>映射元素。然而,外键列不在SHIPMENT表中,
		而在ITEM_SHIPMENT连接表中。通过<join>映射元素把它移动到那里。 -->
	<!-- cascade="save-update":不添加报错object references an unsaved transient instance - save the transient instance before flushing: -->	
	<join table="ITEM_SHIPMENT" optional="true">
		<key column="SHIPMENT_ID"/>
		<many-to-one name="auction" column="ITEM_ID" class="Item" 
			not-null="true" unique="true" 
			cascade="save-update"></many-to-one>
	</join>
</class>


(可以在另一端使用相同的方法,吧在合格关联映射为双向。然而,可选的一对一关联大多数时候都是单向的。) 
插入: 
Shipment shipment = new Shipment(12D); 
Item item = new Item("hello"); 
shipment.setAuction(item); 

session.persist(shipment); 






通过注解映射二级联接表: 
@Entity
public class Shipment implements Serializable {
	@Id
	@GeneratedValue
	@Column(name="SHIPMENT_ID")
	private Integer shipmentId;
	private Double money;
	@OneToOne(cascade=CascadeType.PERSIST)
	//和外键关联的区别就是那个是加入的字段@JoinColumn(name="ADDRESS_ID")
	//和hibernate的区别就是joinColumns替代了key,inverseJoinColumns替代了many-to-one
	//@JoinTable加入维护表,且本实体为维护端
	@JoinTable(name="ITEM_SHIPMENT",
			joinColumns=@JoinColumn(name="SHIPMENT_ID"),
			inverseJoinColumns=@JoinColumn(name="ITEM_ID"))
	private Item auction;


插入: 
Shipment shipment = new Shipment(12D); 
Item item = new Item("hello"); 

shipment.setAuction(item); 
em.persist(shipment); 





通过注解映射二级联接表(可以连接多个字段): 

@Entity
//相当于前面的<key column="..."/>和@JoinTable中的joinColumn()。如果没指定名称,那么就会默认使用主键SHIPMENT_ID
@SecondaryTable(name="ITEM_SHIPMENT")
public class Shipment implements Serializable {
	@Id
	@GeneratedValue
	@Column(name="SHIPMENT_ID")
	private Integer shipmentId;
	private Double money;
	@ManyToOne(cascade=CascadeType.PERSIST)
	@JoinColumn(table="ITEM_SHIPMENT",name="ITEM_ID")
	private Item auction;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值