一、@OneToOne
@Entity
public class User{
private Address address;
@OneToOne
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
@Entity
public class Address{
private User user;
@OneToOne(mappedBy = "address")
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
1、两边都定义了@OneToOne,但都没有定义mappedBy,则user和address表都会生成到对方的外键,双方都是这个关系的拥有者。
2、两边都定义了@OneToOne,如果user定义了mappedBy,则在address表生成到user的外键,address是这个关系的拥有者;如果address定义了mappedBy,则在user表生成到address的外键,user是这个关系的拥有者。
二、@ManyToOne和@OneToMany
@Entity
public class Employee {
private Department department;
@ManyToOne
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
}
@Entity
public class Department {
private Set<Employee> employees = new HashSet<Employee>();
@OneToMany(mappedBy="department")
public Collection<Employee> getEmployees() {
return employees;
}
public void setEmployees(Collection<Employee> employees) {
this.employees = employees;
}
}
@ManyToOne中Many指的是本类(也就是声明@ManeyToOne的类),One是指关联类,也就是To前边的对应本类,后边的对应关联类。如果方法返回的是单数关联类则定义@ManyToOne,例如:
@ManyToOne
public Department getDepartment() {
return department;
}
方法返回的是Department,为单数关联类,对应@ManyToOne中的One;
如果返回的是复数关联类则定义@OneToMany,例如:
@OneToMany(mappedBy="department")
public Collection<Employee> getEmployees() {
return employees;
}
方法返回的是Collection<Employee>,复数关联类,对应@OneToMany中的Many。其中定义mappedBy的是@OneToMany,也就是说One这一方是关系的拥有者。Many一方的表中生成到关联类的外键。
三、@ManyToMany
@Entity
public class Book {
private Set authors = new HashSet<Author>();
@ManyToMany
public Set<Author> getAuthors(){
return authors;
}
Public void setAuthors(Set<Author> authors){
This.authors = authors;
}
}
@Entity
public class Author {
private Set books = new HashSet<Book>();
@ManyToMany(mappedBy="authors")
public Set<Book> getBooks(){
return books;
}
Public void setBooks(Set<Book> books){
This.books = books;
}
}
@ManyToMany会生成中间表,具体表名和字段可以通过@AssociationTable来定义,默认的就可以了,同样关系的非拥有者,需要定义mappedBy属性。
原帖出处:http://tapestry.iteye.com/blog/31928
分享到:
相关推荐
hibernate annotation hibernate3
现在我们公司在做web项目的时候,已经不用*.hbm.xml这种映射文件了,都是用Annotation(注解)方式来完成实体与表之间的映射关系,这样看起来比用xml文件来映射更具有可读性,自我感觉以后Hibernate Annotation的...
hibernate annotation中文文档
hibernate annotation 中文文档
很全的Hibernate Annotation API文档,页面也很漂亮,太强大了。真的很实用!我以前找了好多,都不全,这个真的很不错,推荐一下。
hibernate annotation库所需要引入的三个jar包。
Hibernate Annotation
通过HibernateAnnotation技术就不用xml文件了
Hibernate annotation 3.4 api CHM
逐渐的Hibernate Annotation的映射方式也越来越盛行,相信过不了多久有可能会取代*.hbm.xml映射方式
学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例学习JPA——Hibernate_Annotation使用实例
hibernate 注解 annotation 教程
hibernate annotation3.3 api 文档
java SSH项目 hibernate annotation
该zip包含 hibernate3.3.2相关jar与文档,hibernate annotation3.3.4相关jar与文档。
借助新的 Hibernate Annotation 库,即可一次性地分配所有旧映射文件——一切都会按照您的想法来定义——注释直接嵌入到您的Java 类中,并提供一种强大及灵活的方法来声明持久性映射。 即利用hibernate注解后,可...
springmvc + hibernate annotation 配置
hibernate annotation学习文档,帮助你学习hibernate
hibernate annotation spring 中文参考文档