Hibernate @Any或者@ManyToAny 的用法

原文链接:http://stackoverflow.com/questions/217831/how-to-use-hibernate-any-related-annotations

 

1:业务场景:有时我们需要映射关联属性不同类型的实体,这个时候@ManyToAny 或者 @Any就可以解决该业务场景问题。

 

2:直接上业务实例。

 

用户信息(User)、出借信息(BorrowInfo)、出借类别书本(Book)、出借类别DVD(DVD)、出借类别VHS(VHS)。

 

3:

  (1)省去用户信息

  (2)出借类别书本(Book)实体模型

 

@Entity
@Table(name = "T_BOOK")
public class Book {

	@Column(name="ID")
	private String id ;

	@Column(name="NAME")
	private String name;
	
	@Column(name="ITEM_TYPE")
	private String itemType;
	----省去Get Set方法

}

 (3)出借类别DVD实体模型

@Entity
@Table(name = "T_DVD")
public class DVD {

	@Column(name="ID")
	private String id ;

	@Column(name="NAME")
	private String name;
	
	@Column(name="ITEM_TYPE")
	private String itemType;
	
}

 (4)出借类别VHS实体模型

@Entity
@Table(name = "T_VHS")
public class VHS {

	@Column(name="ID")
	private String id ;

	@Column(name="NAME")
	private String name;
	
	@Column(name="ITEM_TYPE")
	private String itemType;
	
}

 (5)出借信息BorrowInfo实体模型设计

@Entity
@Table(name="BORROW")
public class BorrowInfo {
	
	@Column(name="ID")
	private String id;
	
	@JoinColumn(name="USER_ID")
	private User user;
	
	@Any(metaColumn = @Column(name = "ITEM_TYPE"))
        @AnyMetaDef(idType = "string", metaType = "string", 
            metaValues = { 
             @MetaValue(targetEntity = Book.class, value = "B"),
             @MetaValue(targetEntity = VHS.class, value = "V"),
             @MetaValue(targetEntity = DVD.class, value = "D")
       })
    @JoinColumn(name="ITEM_ID")
	private Object itemObj;
}

 

 补充:有些业务场景需要用到@ManyToAny,可以参见stackoverflow中的方法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值