Hibernate经验

一. 使用Hibernate的步骤:
1. Hibernate的Jar包导入

2. 创建实体类,完成映射。必须要有@Entity。

3. 创建DAO,(必要的话,使用既存的BaseDAO),必须有@Repository("DAO")才可以自动注入。

4. 在Spring的配置文件ApplicationContext.xml中,添加Entity和DAO自动装配时,需要扫描的目录:
Entity:

<bean id="sessionFactory" ...>
    ...
    <property name="packagesToScan">
        <list>
            ...
            <value>com.sun.project</value>
        </list>
    </property>
</bean>

DAO(或其他任何自动装配的组件):
<Context:component-scan base-package="org.sun.com" />

5. 在逻辑层使用:
声明:
@Resource  //自动注入,找到@Repository("SunNewDao")并自动注入。
SunNewDao sunNewDao;

使用:
List<SunNewEntity> sunNewList = sunNewDao.findById(...);

二. DiscriminatorColumn:
Entity可以用@DiscriminatorColumn来设置数据的区分列。
默认为"DTYPE"列,且必须跟@DiscriminatorOptions一起用。
其他Entity设置@DiscriminatorValue("...")来取得DiscriminatorColumn的区分。

* 但是@DiscriminatorValue和@Table同时使用时,好像有点问题,仍然先会取得所有DTYPE的数据,因此建议在子类(extends)使用。
比如,Select表数据时,好像不是先根据@DiscriminatorValue取得@Table的数据后,再做Select。
而是先Select表数据后,再根据@DiscriminatorValue返回值。

三. Hibernate中的类继承:
如果有子类继承父类的Entity,则在做级联检索时,关联了父类的表的话,会自动Left Join出所有子类的Entity。
例:
父类:Course
子类:SunCourse extends Course
当Student表与Course表关联后,也会自动关联SunCourse。
如果执行检索操作,取得Course以后,实际得到的是SunCOurse。
以下是把父类Course转化为子类SunCourse的方法:
If (Course instanceof SunCourse){
    SunCourse sun = (SunCOurse)Course;
}

四. 非主键列的关联:
级联的Annotation的定义中,如果想关联非主键列,则需要使用下列写法:
// codeid是非主键列
@JoinColumn(name="unit_id", referencedColumnName="codeid", insertable=false, updatable=false)
@ManyToOne(targetEntity=UnitTypeEntity.class, cascade={javax.persistence.CascadeType.MERGE, javax.persistence.CascadeType.PERSIST})
Private UnitTypeEntity unit;

五. @Resource和@Autowired的作用和区别:
作用相同,都是自动注入。
@Resource是按ByName自动注入。
@Autowired是按ByTpye自动注入。
如果既不指定name,也不指定type,则使用byName自动注入策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值