hibernate_表关联

1. 表关联(一对一)

 

user表关联company表,在user类添加company的成员变量:

    // onetoone关联子表

    private User_child childUser;

@OneToOne(targetEntity=User_child.class, fetch=FetchType.LAZY, cascade=CascadeType.ALL)

    public User_child getChildUser() {

return childUser;

}

 

public void setChildUser(User_child childUser) {

this.childUser = childUser;

}

当使用user.save方法时,优先将其成员childUser保存,再保存user表。

其中OneToOne的参数如下:

属性

是否必须

说明

cascade

指定Hibernate对关联实体怎样的级联策略,该级联策略支持如下5个属性值:

1:CascadeType.ALL :指定Hibernate将所有持久化操作都被关联到关联实体。

Save update delete saveorupdate PERSIST merge

2:CascadeType.MERGE:指定Hibernate将merge操作级联到关联实体。

3:CascadeType.PERSIST:指定Hibernate讲persis操作级联到关联实体。

4:CascadeType.REFRESH:指定Hibernate将refresh操作级联到关联实体

5:CascadeType.REMOVE:指定Hibernate将remove操作关联到关联实体

fetch

指定抓取关联实体时的抓取策略,该属性支持如下两个属性值:

FetchType.EAGER:抓取实体时,立即抓取关联实体,这是默认值

FetchType.LAZY:抓取实体时,延迟抓取关联实体,等到真正用到关联实体时才去抓取。

mappedBy

指定关联实体中的属性可以引用的实体父类。

orphanRemoval

是否删除孤儿实体,如果某个实体所关联的父实体不存在,改实体就是所谓的孤儿实体。

optional

该属性置顶关联关系是否可选

targetEntity

该属性置顶关联实体的类名,在默认情况下,Hibernate通过反射来判断关联实体的类名。

如,当cascadeCascadeType.PERSIST时,只有user.persis才能影响到company表,使用user.save方法是不会操作company表的。

又如,当fetchFetchType.EAGER时,不管使用的是user.load还是user.get,都会立马将company查出.

 

2. 表关联(N对一)

使用hibernate要的一点就是为了方便查询,级联查询,可以省略很多sql查询语句。但会消耗一定的性能,所以不推荐使用。

    // manytoone关联公司表

    private Company company;

// user表中有个外键字段companyid

@JoinColumn(name="companyid", referencedColumnName="id")

@ManyToOne(targetEntity=Company.class, fetch=FetchType.LAZY, cascade=CascadeType.ALL)

public Company getCompany() {

return company;

}

 

public void setCompany(Company company) {

this.company = company;

}  

 

属性

是否必须

说明

cascade

指定Hibernate对关联实体怎样的级联策略,该级联策略支持如下5个属性值:

1:CascadeType.ALL :指定Hibernate将所有持久化操作都被关联到关联实体。

2:CascadeType.MERGE:指定Hibernate将merge或update操作级联到关联实体。

3:CascadeType.PERSIST:指定Hibernate讲persist或者save操作级联到关联实体。

4:CascadeType.REFRESH:指定Hibernate将refresh操作级联到关联实体

5:CascadeType.REMOVE:指定Hibernate将remove操作关联到关联实体

fetch

指定抓取关联实体时的抓取策略,该属性支持如下两个属性值:

FetchType.EAGER:抓取实体时,立即抓取关联实体,这是默认值

FetchType.LAZY:抓取实体时,延迟抓取关联实体,等到真正用到关联实体时才去抓取。

optional

该属性置顶关联关系是否可选

targetEntity

该属性置顶关联实体的类名,在默认情况下,Hibernate通过反射来判断关联实体的类名。

 

3. 表关联(一对N

单向的一对N在开发中用的比较少,一般和上面的N对一配套使用,如下:

// 括号中写0表示长度为0,不占用内存空间,不写的话默认为10

private List<User> userList = new ArrayList<User>(0);

@OneToMany(cascade=CascadeType.ALL, mappedBy="company",fetch=FetchType.LAZY)

public List<User> getUserList() {

return userList;

}

public void setUserList(List<User> userList) {

this.userList = userList;

}

:其中mappedBy的内容为User对象中的ManyToOne成员变量的名称,意思是当删除company的时候交由user中的company对象去负责。因在级联情况下OneToMany中删除company时候会先删user

 

属性

是否必须

说明

cascade

指定Hibernate对关联实体怎样的级联策略,该级联策略支持如下5个属性值:

1:CascadeType.ALL :指定Hibernate将所有持久化操作都被关联到关联实体。

2:CascadeType.MERGE:指定Hibernate将merge或update操作级联到关联实体。

3:CascadeType.PERSIST:指定Hibernate讲persist或者save操作级联到关联实体。

4:CascadeType.REFRESH:指定Hibernate将refresh操作级联到关联实体

5:CascadeType.REMOVE:指定Hibernate将remove操作关联到关联实体

fetch

指定抓取关联实体时的抓取策略,该属性支持如下两个属性值:

FetchType.EAGER:抓取实体时,立即抓取关联实体,这是默认值

FetchType.LAZY:抓取实体时,延迟抓取关联实体,等到真正用到关联实体时才去抓取。

mappedBy

该属性合法的属性为关联实体的属性名,改属性置顶关联实体中那个属性可以引用当前实体.

targetEntity

该属性置顶关联实体的类名,在默认情况下,Hibernate通过反射来判断关联实体的类名。

 

N在开发中一般不用,因为太消耗资源,它不能分页在外面使用查询语句分页查询就可以了,没必要使用一对N级联。

 

4. 表关联(N对N

@ManyToMany

发中并推荐使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值