hibernate注解的方式实现映射

  • 表的映射
//代表此类参与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>();

猜你喜欢

转载自blog.csdn.net/sinat_38314794/article/details/81069280