hibernate通过注解实现实体和表的映射

Posted liuconglin的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate通过注解实现实体和表的映射相关的知识,希望对你有一定的参考价值。

参考:

表名的映射:

//代表此类参与ORM映射,此注解必须要有
@Entity  
//代表user这个类映射了一个表user50,如果表名和类名一样,此注解可以省略
@Table(name="user50")
public class User {

主键的映射:

   //主键,此注解必须要有
    @Id  
    //数据库表中主键列名为id,如果实体类属性名和列名相同,此注解可以省略
    @Column(name="id")  
    //主键的维护策略
    @GenericGenerator(name="inc50",strategy="increment")   
    @GeneratedValue(generator="inc50")
    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"对方中映射着外键的关系属性==Passport表中有一个关系属性,名字是person50"
    @OneToOne(mappedBy="person50")
    //ALL:增删改都可以级联(cascade)
    //save-update:增加和更新可以级联
    //delete:删除可以级联
    //如果不设置,则增删改都不可以级联
    //注意:查询例外,不受级联权限的控制,默认级联。
    @Cascade(value=CascadeType.ALL)
    private Passport passport50;

Passport实体中:

  //关系属性
    @OneToOne
    //JoinColumn:代表是从表,name的值代表:Passport表中外键名为person_id
    @JoinColumn(name="person_id")
    //@Cascade
    private Person person50;

表之间的关系是一对多的映射:

user表    1: n    order表

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   n:n    Course      关系表: r_c_s

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>();

 


以上是关于hibernate通过注解实现实体和表的映射的主要内容,如果未能解决你的问题,请参考以下文章

hibernate注解配置

JPA Hibernate jpa spring data jpa

Hibernate的注解似开发

hibernate通过xml配置文件实现表与实体的映射

MyBatis表和实体关联

hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系