Hibernate 注解注册

注解注册:

hibernate注解需要导入以下jar包
hibernate-commons-annotations.jar
hibernate-annotations.jar
ejb3-persistence.jar

@ Entity 定义实体类,表示该类可以通过注解进行操作
@ Table(name="t_user2") 指明该实体类映射的数据库表名
@ Id 表示定义主键,
@ GeneratedValue(strategy=GenerationType.AUTO) 定义主键生成策略,为数据库自动增长( AUTO 5.0不支持
@GeneratedValue(strategy=GenerationType.IDENTITY) hibernate4.0,5.0均支持

@ Column(name="productName") 定义该属性对应的列名,如果属性名和列名一致可以不用写。
@Transient 表示该属性并非一个到数据库表的字段的映射

在hibernate.cfg.xml中注册注解类:
<mapping class="com.lovo.bean.ProductBean"/>

u 编写测试类:
u Configuration config = new AnnotationConfiguration().configure();
u SessionFactory factory = config.buildSessionFactory();
u Session session = factory.openSession();
u session.beginTransaction();
u ProductBean bean = new ProductBean("张三",12,"898797");
u session.save(bean);
u session.getTransaction().commit();
u session.close();

Hibernate 注解一对一(外键关联)
从表方配置
public class WifeBean {
@OneToOne //表示一对一@JoinColumn(name="husbandId",unique=true)
private HusbandBean husband;}name="husbandId"
name 指明从表外键列名
unique=true 为唯一约束,表示唯一外键关联

主表方配置:
public class HusbandBean { @OneToOne(mappedBy="husband")
private WifeBean wife;
}
mappedBy="husband" 表示当前属性关联的从表对象的关联属性名。同时指明只有添加从表对象时,才添加外键列。相当于inverse=true
查询没有妻子的丈夫
select h from HusbandBean h left join h.wife w where w is null

Hibernate 注解一对多
一方配置:
@OneToMany (
fetch=FetchType.EAGER, targetEntity=HouseBean.class, cascade=CascadeType.ALL, mappedBy="person" )
@JoinColumn(name="personId")
private Set houses = new HashSet();

fetch=FetchType.EAGER 指定是否延迟加载,值为 FetchType.LAZY 表示延迟, 为FetchType.EAGER 表示立即加载targetEntity=HouseBean.class集合中存放元素类型mappedBy="husband" 关联从表对象中的关联对象属性名。同时指明只有添加从表对象时,才添加外键列。相当于inverse=truecascade=CascadeType.ALL为级联操作@JoinColumn(name="personId")指明从表中的外键列名

多方配置

@ManyToOne(fetch=FetchType.LAZY)
 @JoinColumn(name="personId")
private Person person;
@JoinColumn(name="personId")指明从表中的外键列名
Hibernate注解一对多。默认采用多方维护外键方式。相当于在一方set标签加入了 inverse="true"。



Hibernate注解多对多

u多方配置:

@ManyToMany(fetch=FetchType.LAZY,
  targetEntity=TeacherBean.class)
  @JoinTable(name="t_stu_tea",
      joinColumns={@JoinColumn(name="studentId")},
        inverseJoinColumns={
  @JoinColumn(name="teacherId")})
  private Set teacherSet;
u
u name="t_stu_tea",指明中间表名
u joinColumns={@JoinColumn(name="studentId")当前对象对应中间表的外键列名
u inverseJoinColumns={@JoinColumn(name="teacherId")}指明多对多中另一个表的外键列名。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值