- 表的映射
//代表此类参与ORM映射,此注解必须要有
@Entity
//代表user这个类映射了一个表xx_user,如果表名和类名一样,此注解可以省略
@Table(name="xx_user")
public class User {
//主键,此注解必须要有
@Id
//数据库表中主键列名为id,如果实体类属性名和列名相同,此注解可以省略
@Column(name="id")
//主键的维护策略
@GenericGenerator(name="xxx_id",strategy="increment")
@GeneratedValue(generator="xxx_id")
private Integer userID;
- 属性映射
@Column(name="name")//此属性要映射到名为name的列上,若属性名和列名相同,则注解可以省略
private String name;
- 日期类型映射
@Column(name="birth")
//如果属性是日期格式,可以设置日期的保存规格
//time:只保存时间 date:只保存日期 timestamp:(默认)日期+时间
@Temporal(TemporalType.DATE)
private Date birthday;
- 一对一映射
person实体类
//关系属性:告知Passport它的关系属性
//mappedBy"对方中映射着外键的关系属性==Address表中有一个关系属性,名字是xxx_person"
@OneToOne(mappedBy="xxx_person")
//ALL:增删改都可以级联(cascade)
//save-update:增加和更新可以级联
//delete:删除可以级联
//如果不设置,则增删改都不可以级联
//注意:查询例外,不受级联权限的控制,默认级联。
@Cascade(value=CascadeType.ALL)
private Address address;
address实体类
//关系属性
@OneToOne
//JoinColumn:代表是从表,name的值代表:Address表中外键名为person_id
@JoinColumn(name="person_id")
//@Cascade
private Person person;
- 一对多映射
user实体类
@OneToMany(mappedBy="user")
//ALL:增删改都可以级联(cascade)
//save-update:增加和更新可以级联
//delete:删除可以级联
//如果不设置,则增删改都不可以级联
//注意:查询例外,不受级联权限的控制,默认级联。
@Cascade(value=CascadeType.DELETE)
private Set<Order> orders=new HashSet<Order>();
order实体
//关系属性
@ManyToOne
//JoinColumn:name代表关系属性映射的列
@JoinColumn(name="user_id")
private User user;
- 多对多关系
student实体类
//关系属性
//EAGER: 查询时关联的数据也同时取出放入内存中,因为在内存里,所以在session外也可以取
@ManyToMany(fetch=FetchType.EAGER)
//中间表,两个外键: joinColumns=指向自己的外键 inverseJoinColumns=指向对方的外键
@JoinTable(name="r_c_s"
,joinColumns={@JoinColumn(name="stu_id")}
,inverseJoinColumns={@JoinColumn(name="cour_id")})
@Cascade(value=CascadeType.ALL)
private Set<Course> courses=new HashSet<Course>();
course实体
//关系属性
@ManyToMany
@JoinTable(name="r_c_s"
,joinColumns={@JoinColumn(name="cour_id")}
,inverseJoinColumns={@JoinColumn(name="stu_id")})
@Cascade(value=CascadeType.ALL)
private Set<Student> students=new HashSet<Student>();