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中的方法。

猜你喜欢

转载自nanjiwubing123.iteye.com/blog/2208937
今日推荐