weixin_42318927
2009-07-11 09:01 阅读 174
已采纳

hibernate实体查询问题

使用实体查询时,是否一定要建立一个实体的hibernate的映射文件?
[b]问题补充:[/b]
除了加入
@Entity
@Table(name="***"),之外,还需要在配置文件中做什么配置吗,
我使用spring+hibernate,如果有对应的实体映射文件就可以查处数据来,否则就提示我 UserDefModel is not mapped

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    wanghaolovezlq wanghaolovezlq 2009-07-11 14:04

    以前编写实体类Entity的时候,都需要配置映射文件.hbm.xml,同时需要在sessionFactory中配置映射文件或映射目录
    使用annotation时需要将sessionFactory定义为:

    【Entity】
    文件映射


    ...hbm.xml
    ....

    或者 目录映射


    classpath:/../hbm/
    ....


    现在可以使用Annotation来简化配置(jdk5 spring2.5 hibernate3.3)
    在sessionFactory中配置

    然后在Entity中定义类名的地方注释:@MappedSuperclass就可以自动完成载入,不用再配置.

    【service】
    以前编写service时要先编写Entity,Dao然后进行Dao配置进行自动注入Service
    class="com.gzpost.cps.dao.hibernate.MailDaoHibernate">




    class="com.gzpost.cps.service.impl.MailSearchServiceImpl">




    当然也可以在Spring配置中申明按名或按类自动注入,可以少配置属性,但是Bean还是要配置的

    现在可以使用SpringSide的SimpleHibernateTemplate范型Dao,直接在Service层创建,同时Service采用@Service注释来自动注册服务,在要注入参数的地方注释:@Autowired,就可以自动注入参数,前提是必须在Spring中配置


    这样就搞定了,可以减少好多的配置
    【transaction】


    在服务类定义处注释:@Transactional,还可以在具体方法出定义@Transactional(readOnly=true)//使用readOnly可以提高性能
    同一个方法里,事务可以传递,可以解决Lazy问题,可以不再使用:openSessionInView,使用此切面(aspect),必须在 实现 类(和/或类里的方法)、而不是类的任何所实现的接口上面进行注解
    例如:
    @Transactional
    public class UserManagerInCatche {
    @Transactional(readOnly=true)//使用readOnly可以提高性能
    public void initResourceCache() {
    if (!cacheInitialized) {
    synchronized (this) {
    List resources = userManager.getAllResorece();
    for (Resource resource : resources) {
    resourceDetailsInCache(resource);//resourceDetailsInCache方法会使用initResourceCache方法的事务
    }
    cacheInitialized = true;
    }
    }
    }
    private void resourceDetailsInCache(
    Resource resource) {
    // GrantedAuthority[] authorities = role2authorities(userManager.getRolesByResourceId(resource.getId()));
    GrantedAuthority[] authorities = role2authorities(resource.getRoles());

      ResourceDetails rd = new gzpost.security.resourcedetails.Resource(resource
        .getResString(), resource.getResType(), authorities);
      resourceCache.putAuthorityInCache(rd);
     }
    }
    
    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 2009-07-11 09:12

    不一定,现在有注解的方式,直接在代码里用注解来代替hibernate的映射文件了

    点赞 评论 复制链接分享
  • liyistudio liyistudio 2009-07-11 09:19

    用注解替代就行啦,简单方便,例如:
    @Entity
    @Table(name="T_User")
    public class User{

    }
    这样你的User.hbm.xml文件就不用啦,更多的信息就参考一下hibernate注解API

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 2009-07-11 14:05
    点赞 评论 复制链接分享

相关推荐