`

HIBERNATE 关系注解

阅读更多
1.多对多关系
表product,category,category_has_product
@ManyToMany(mappedBy="products",cascade={CascadeType.PERSIST})
private List<Category> categorys = Lists.newArrayList();


@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.PERSIST)
	@JoinTable(name="CATEGORY_HAS_PRODUCT",
			joinColumns={@JoinColumn(name="category_id")},
			inverseJoinColumns={@JoinColumn(name="product_id")}
	)
private List<Product> products = Lists.newArrayList();



1 单向一对多
主表 TC_PICK_RESULT_GROUP
明细表 TC_PICK_RESULT_STAFF
只需要在主表类维护一个子表集合
private Set<TcPickResultStaff> groupStaffs = new LinkedHashSet<TcPickResultStaff>();

@OneToMany(targetEntity=TcPickResultStaff.class,cascade = CascadeType.REMOVE, fetch = FetchType.LAZY)
	@JoinColumn(name="RESULT_GROUP_ID")
	public Set<TcPickResultStaff> getGroupStaffs() {
		return groupStaffs;
	}

JoinColumn 标识子表进行左连接的外键数据库字段



引用

JPA实体关系映射之注释
下面是我总结的JPA实体关系映射的注释写法:

1.单向 一对一
@OneToMany(cascade = {CascadeType.ALL})
@JoinColumn(name = "...")

@JoinColumn注释的是保存表与表关系的字段.


2.双向 一对一
(1)
@OneToOne
@JoinColumn(name = "...")
@JoinColumn注释的是保存表与表关系的字段.
(2)
@OneToOne(mapedBy = "...")
mappedBy属性来指明所映射的实体关系,它的值为所关联实体中该属性的名称.


4.单向一对多
@OneToMany
@JoinColumn(name = "...")
@JoinColumn注释的是保存表与表关系的字段.


5.双向一对多
(一对多)
@OneToMany(mapedBy = "...")
mappedBy属性来指明所映射的实体关系,它的值为所关联实体中该属性的名称.

(多对一)
@ManyToOne
@JoinColumn(name = "...")
@JoinColumn注释的是保存表与表关系的字段.


7.单向多对多
设置双向多对多的(1)一边就可以了
@ManyToMany(targetManager = ContactEO.class, cascade = {CascadeType.ALL})
@JoinTable(name = "tb_customer_contact",
           joinColumns = {
               @JoinColumn(name = "cumtomer_id")
           },
           inverseJoinColumns = {
               @JoinColumn(name = "contact_id")
           })


8.双向多对多
(1)
如客户(CustomerEO)实体与联系人(ContactEO)实体是双向多对多的关系.
则在客户(CustomerEO)实体类中这样配置:
@ManyToMany(targetManager = ContactEO.class, cascade = {CascadeType.ALL})
@JoinTable(name = "tb_customer_contact",
           joinColumns = {
               @JoinColumn(name = "cumtomer_id")
           },
           inverseJoinColumns = {
               @JoinColumn(name = "contact_id")
           })
@JoinTable用于注释关联的表.
joinColumns属性表示,在保存关系的表中,所保存关联关系的外键的字段,并配合@JoinColumn标记使用.
例如以下的映射配置,表示字段customer_id为外键关联到customer表中的id字段.
           joinColumns = {
               @JoinColumn(name = "cumtomer_id", referencedColumnName = "id")
           },
inverseJoinColumns属性与joinColumns属性类似,它保存的是保存关系的另一个外键字段.
例如以下的映射配置,表示字段address_id为外键关联到address表中的id字段.
           inverseJoinColumns = {
               @JoinColumn(name = "contact_id", referencedColumnName = "id"))
           }
@JoinColumn注释的是保存表与表关系的字段.

(2)
在联系人(ContactEO)实体类中这样配置:
@ManyToMany(cascade = {CascadeType.ALL }, mappedBy = "contacts")
mappedBy属性来指明所映射的实体关系,它的值为所关联实体中该属性的名称.


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics