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

复制代码

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值