hibernate @MappedBy

还是inverse好用.

一个双向关系的反向端(被拥有方)(如:DepartmentInfo)必须是通过使用OneToOne,OneToMany或ManyToMany注解的mappedBy元素指向其拥有方(如:UserInfo)。该mappedBy元素指定的实体(关系的所有者)的属性或字段(如:UserInfo的字段departmentInfo)。
example:
@Entity
@Table(name = "userInfo", schema = "dbo", catalog = "oa", uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public class UserInfo implements java.io.Serializable {
private Integer userId;

	private DepartmentInfo departmentInfo;
//other field

@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "departmentId", nullable = false)
	public DepartmentInfo getDepartmentInfo() {
		return this.departmentInfo;
	}

//other getter setter
}

@Entity
@Table(name = "departmentInfo", schema = "dbo", catalog = "oa")
public class DepartmentInfo implements java.io.Serializable {
private Integer departmentId;
private Set<UserInfo> userInfos = new HashSet<UserInfo>(0);
//other field
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "departmentInfo")
	public Set<UserInfo> getUserInfos() {
		return this.userInfos;
	}
//other getter setter
}


一个双向关系的反向端(被拥有方)必须是通过使用OneToOne,OneToMany或ManyToMany注解的mappedBy元素指向其拥有方。该mappedBy元素指定的实体(关系的所有者)的属性或字段。
换句话讲:双向关系的拥有方默认是指向被拥有方的,这样默认是不需要mappedBy元素来指定.同时这样的默认会再被拥有方使用mappedBy元素后失效(即由mappedBy指定).

在 one-to-many / many-to-one的双向的关系中many方 必须是关系的所有方,因此mappedBy元素不能在many-to-one中使用(指明)(规定).

对于一对一的双向关系,拥有方是(与...相一致)包含相应的外键的一方。

对于many to many的双向关系的双方都可以是拥有方。

mappedBy跟JoinColumn/JoinTable总是处于互斥的一方,可以理解为正是由于拥有方的关联被拥有方的字段存在,拥有方才拥有了被拥有方。mappedBy这方定义的JoinColumn/JoinTable总是失效的,不会建立对应的字段或者表;

又糊涂了

你可能感兴趣的:(Hibernate)